From 1633ba9353383dda1248c6eb1a8862652bcd2df1 Mon Sep 17 00:00:00 2001 From: oysta_admin Date: Tue, 28 Oct 2025 12:06:02 +0000 Subject: [PATCH] for acceptance testing --- oysta-rio | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oysta-rio b/oysta-rio index 15e45cc..4abd2a4 100644 --- a/oysta-rio +++ b/oysta-rio @@ -1 +1 @@ -{"Id":184,"Name":null,"Description":null,"FirmwareVersion":"V04b.8601.2406.1.0.16.4411.2406.25","InProgress":false,"MessageTypes":[{"Id":5282,"Code":"CYC-BUFF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":2,"NewValue":"{\"Id\":5282,\"Code\":\"CYC-BUFF\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-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,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694505905}],"Tags":[]},{"Id":5281,"Code":"CYC","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5281,\"Code\":\"CYC\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-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,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694505829}],"Tags":[]},{"Id":5280,"Code":"CYC-BUF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":2,"NewValue":"{\"Id\":5280,\"Code\":\"CYC-BUF\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-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,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694505881}],"Tags":[]},{"Id":5279,"Code":"CYC-BUF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":2,"NewValue":"{\"Id\":5279,\"Code\":\"CYC-BUF\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-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,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694505892}],"Tags":[]},{"Id":5278,"Code":"ACK-RST","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"reset ok.","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":3290,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.3","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"Factory Reset","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 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);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0300' + 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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"CacheImei":false,"RegEx":"^reset ok.","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5278,\"Code\":\"ACK-RST\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"{{reset ok.|Reiniciar ok.}}\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":{\"Id\":3290,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.4\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Factory Reset\",\"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!';\\nif (params.DeviceVersion.DeviceVersion == '2') {\\n dataSMS = 'ineedtoresetEV05!';\\n}\\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\":null},\"CacheImei\":false,\"RegEx\":\"^(reset ok.|Reiniciar ok.)\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695719096}],"Tags":[]},{"Id":5277,"Code":"ACK-RST","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"reset ok.","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":3290,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.3","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"Factory Reset","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 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);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0300' + 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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"CacheImei":false,"RegEx":"^reset ok.","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":2,"NewValue":"{\"Id\":5277,\"Code\":\"ACK-RST\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"reset ok.\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^reset ok.\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694504639}],"Tags":[]},{"Id":5034,"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":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":3280,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.3","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"ASet SMS Prefix","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":9,"Order":null},"CacheImei":false,"RegEx":"^remove prefix ok.","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5033,"Code":"ACK-SRV","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Set IP ok.","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":3313,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.3","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"Server","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\n//var configs2 = [];\n/*if (params.SMSPassword.SMSPasswordOld) {\n var data2 = `${params.SMSPassword.SMSPasswordOld}prefix1,${serverParams.Imei}`;\n} else {\n var data2 = `prefix1,${serverParams.Imei}`;\n}\nAddValue('data', data2);*/\n//var commandConfigs2 = {\n// template: \"main\",\n// configs: configs2\n//};\n//msg.push(JSON.stringify(commandConfigs2));\nif (params.Server.SetServer) {\n var serverString = params.Server.SetServer.split(',');\n var domain = serverString[0];\n var port = serverString[1];\n if (params.SMSPassword.SMSPasswordOld) {\n var data = `${params.SMSPassword.SMSPasswordOld}IP1,${domain},${port}`;\n } else {\n var data = `IP1,${domain},${port}`;\n }\n}\nAddValue('data', data);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue2(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs2.push(cvpair);\n}\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":2,"Order":null},"CacheImei":false,"RegEx":"^Set IP ok.","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5033,\"Code\":\"ACK-SRV\",\"Name\":null,\"MessageCode\":\"ACK\",\"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\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":{\"Id\":3313,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.4\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Server\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\n//var configs2 = [];\\n/*if (params.SMSPassword.SMSPasswordOld) {\\n var data2 = `${params.SMSPassword.SMSPasswordOld}prefix1,${serverParams.Imei}`;\\n} else {\\n var data2 = `prefix1,${serverParams.Imei}`;\\n}\\nAddValue('data', data2);*/\\n//var commandConfigs2 = {\\n// template: \\\"main\\\",\\n// configs: configs2\\n//};\\n//msg.push(JSON.stringify(commandConfigs2));\\nif (params.Server.SetServer) {\\n var serverString = params.Server.SetServer.split(',');\\n var domain = serverString[0];\\n var port = serverString[1];\\n if (params.SMSPassword.SMSPasswordOld) {\\n var data = `${params.SMSPassword.SMSPasswordOld}IP1,${domain},${port}`;\\n } else {\\n var data = `IP1,${domain},${port}`;\\n }\\n}\\nAddValue('data', data);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue2(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs2.push(cvpair);\\n}\\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\":2,\"Order\":0},\"CacheImei\":false,\"RegEx\":\"^(Set IP ok.|Configuracin de IP OK)\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1696493376}],"Tags":[]},{"Id":5032,"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":3325,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.3","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"Request Location","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":true,"SendAttempts":25,"Order":null},"CacheImei":false,"RegEx":"^(Now:Loc Time: |Ubicacin GPS:Tiempo de Loc: )[^)]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5031,"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":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":3325,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.3","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"Request Location","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":true,"SendAttempts":25,"Order":null},"CacheImei":false,"RegEx":"^(Device location request have received!|Solicitud de ubicacin recibida!)","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5030,"Code":"ACK-APN","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Set APN ok.","HasTemplateGlobal":false,"ResponseTemplate":"ok1","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":3314,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.3","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"APN","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nif (params.SetAPN.SetAPN) {\n var apnString = params.SetAPN.SetAPN.split(',');\n var apn = apnString[0];\n var apn_username = apnString[1];\n var apn_password = apnString[2];\n if (params.SMSPassword.SMSPasswordOld) {\n var data = `${params.SMSPassword.SMSPasswordOld}S1,${apn},${apn_username},${apn_password}`;\n } else {\n var data = `S1,${apn},${apn_username},${apn_password}`;\n }\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":2,"Order":null},"CacheImei":false,"RegEx":"^Set APN ok.","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5030,\"Code\":\"ACK-APN\",\"Name\":null,\"MessageCode\":\"ACK\",\"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\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":{\"Id\":3314,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.4\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"APN\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nif (params.SetAPN.SetAPN) {\\n var apnString = params.SetAPN.SetAPN.split(',');\\n var apn = apnString[0];\\n var apn_username = apnString[1];\\n var apn_password = apnString[2];\\n if (params.SMSPassword.SMSPasswordOld) {\\n var data = `${params.SMSPassword.SMSPasswordOld}S1,${apn},${apn_username},${apn_password}`;\\n } else {\\n var data = `S1,${apn},${apn_username},${apn_password}`;\\n }\\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\":2,\"Order\":1},\"CacheImei\":false,\"RegEx\":\"^(Set APN ok.|Configuracin APN OK.)\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1696493432}],"Tags":[]},{"Id":5029,"Code":"ACK-RBT","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"reboot ok.","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":3315,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.3","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"Device Reboot","TemplateSMS":null,"Template":null,"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 sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '04'\nvar keyLength = '01'\nvar key = '12'\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)\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0300' + 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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"CacheImei":false,"RegEx":"^reboot ok.","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5029,\"Code\":\"ACK-RBT\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"{{reboot ok.|Reiniciar ok.}}\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":{\"Id\":3315,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.4\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Device Reboot\",\"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\":2,\"Order\":null},\"CacheImei\":false,\"RegEx\":\"^(reboot ok.|Reiniciar ok.)\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1696072379}],"Tags":[]},{"Id":5028,"Code":"ACK-Out Of Service","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB0003005BF1[^ ]*7F0130","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5027,"Code":"F-ACK-Address Resp","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB0003006262[^ ]*7F0128","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5026,"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":5025,"Code":"F-ACK-Version Invalid","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB00030018C5[^ ]*7F0111","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5024,"Code":"F-ACK-Length Error","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB0003005AE5[^ ]*7F0113","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5023,"Code":"F-ACK-Checksum Error","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB000300BD95[^ ]*7F0114","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5022,"Code":"F-ACK-Encryption Invalid","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB0003007BF5[^ ]*7F0112","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5021,"Code":"ACK-global","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-ACK;<>;AB00030008C7<>7F0100","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-ACK;[^;]*;AB00030008C7[^ ]*7F0100","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5020,"Code":"F-ACK-No Memory","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB000300CFB3[^ ]*7F0125","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5019,"Code":"F-ACK-SubFunction Not Supported","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-ACK;<>;AB00030083AC<>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":"^Eview-ACK;[^;]*;AB00030083AC[^7;]*7F0126","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5018,"Code":"F-ACK-Key Length Error","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB000300DEA5[^ ]*7F0117","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5017,"Code":"F-ACK-Data Size Error","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB00030028C3[^ ]*7F0122","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5016,"Code":"F-ACK-Invalid State","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB00030009D3[^ ]*7F0123","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5015,"Code":"COMM-SMS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Rio-<>-<>","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":"","LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Rio-[^-]*-[^-]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5015,\"Code\":\"COMM-SMS\",\"Name\":null,\"MessageCode\":\"COMM\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-<>-<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":\"\",\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"ProtocolsLibraryMethod\":null,\"ProtocolsLibraryMethodArgs\":null,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-[^-]*-[^-]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1724069228},{"Type":1,"NewValue":"{\"Id\":5015,\"Code\":\"COMM-SMS\",\"Name\":null,\"MessageCode\":\"COMM\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Rio-<>-<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":\"\",\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"ProtocolsLibraryMethod\":null,\"ProtocolsLibraryMethodArgs\":null,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Rio-[^-]*-[^-]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1724069434}],"Tags":[]},{"Id":5014,"Code":"RTL","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Rio-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":"^Rio-RTL;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5013,"Code":"CHK","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-HTB;<>;STATUS=<>;TIME=<>;BATP=<>;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=[^;;]*;GENERAL=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5013,\"Code\":\"CHK\",\"Name\":null,\"MessageCode\":\"CHK\",\"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,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-HTB;[^;]*;STATUS=[^;;]*;TIME=[^;;]*;BATP=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694505577}],"Tags":[]},{"Id":5012,"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":5011,"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":5010,"Code":"F-ACK-GPS Is Not Ready","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB0003008D93[^ ]*7F0127","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5009,"Code":"F-ACK-Data Format Invalid","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB0003004BF3[^ ]*7F0121","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5008,"Code":"F-ACK-Command Invalid","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB0003009C85[^ ]*7F0115","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5007,"Code":"F-ACK-BLE Password","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB000300CC8F[^7;]*7F0140","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5006,"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":5005,"Code":"F-ACK-Key Invalid","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB000300FFB5[^ ]*7F0116","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5004,"Code":"CHK-ASSO","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"RIO-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":"^RIO-ASSOCIATE;[^;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5004,\"Code\":\"CHK-ASSO\",\"Name\":null,\"MessageCode\":\"CHK\",\"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\":[]}","Timestamp":1724069280},{"Type":1,"NewValue":"{\"Id\":5004,\"Code\":\"CON-ASSO\",\"Name\":null,\"MessageCode\":\"CON\",\"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\":[]}","Timestamp":1749056594}],"Tags":[]},{"Id":5003,"Code":"F-ACK-Invalid Parameter","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB000300EEA3[^ ]*7F0124","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5002,"Code":"ALNM","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Eview-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":"^Eview-ALNM;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5001,"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":5000,"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":[{"Type":1,"NewValue":"{\"Id\":5000,\"Code\":\"ENC-2\",\"Name\":null,\"MessageCode\":\"ENC\",\"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,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"\",\"RegExGlobal\":\"^(AB00[^ ]*)+\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694709634},{"Type":1,"NewValue":"{\"Id\":5000,\"Code\":\"ENC-2\",\"Name\":null,\"MessageCode\":\"ENC\",\"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,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"\",\"RegExGlobal\":\"^AB00[^ ]*\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694769070}],"Tags":[]},{"Id":4999,"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":4998,"Code":"ALF-C","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ALF-C;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4997,"Code":"ALA-O","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ALA-O;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4996,"Code":"ALA-S","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ALA-S;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4995,"Code":"Alert Finalized","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-SOSEnding;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4994,"Code":"BATF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-BATF;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4993,"Code":"ALMOV","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Eview-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":"^Eview-ALMOV;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4992,"Code":"ALA","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Eview-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":"^Eview-ALA;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4991,"Code":"ALA-C","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ALA-C;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4990,"Code":"ALF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Eview-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":"^Eview-ALF;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4989,"Code":"CYC","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-CYC;<>;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":"^Eview-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":2,"NewValue":"{\"Id\":4989,\"Code\":\"CYC\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-CYC;<>;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,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694504710}],"Tags":[]},{"Id":4988,"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":4987,"Code":"PWRN","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-PWRN;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4986,"Code":"PWRF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-PWRF;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4985,"Code":"ALSP","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Eview-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":"^Eview-ALSP;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4984,"Code":"HRT","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Eview-HRT;<>;GENERAL=<>;<>;HRT=<>","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":"^Eview-HRT;[^;]*;GENERAL=[^;;]*;[^;;]*;HRT=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4984,\"Code\":\"HRT\",\"Name\":null,\"MessageCode\":\"HRT\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":1,\"Template\":\"Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>;TLEVEL=<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-HRT;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;HRT=[^;;]*;TLEVEL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694506002},{"Type":1,"NewValue":"{\"Id\":4984,\"Code\":\"HRT\",\"Name\":null,\"MessageCode\":\"HRT\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":1,\"Template\":\"Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>;TLEVEL=<>;LABEL=<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-HRT;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;HRT=[^;;]*;TLEVEL=[^;;]*;LABEL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694533036},{"Type":1,"NewValue":"{\"Id\":4984,\"Code\":\"HRT\",\"Name\":null,\"MessageCode\":\"HRT\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>;TLEVEL=<>;LABEL=<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-HRT;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;HRT=[^;;]*;TLEVEL=[^;;]*;LABEL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707754959}],"Tags":[]},{"Id":4983,"Code":"BATL","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Eview-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":"^Eview-BATL;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4982,"Code":"BATCF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-BATCF;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4981,"Code":"ALSOS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Eview-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":"^Eview-ALSOS;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4980,"Code":"BATCN","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-BATCN;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5287,"Code":"COMM-STP","Name":null,"MessageCode":"COMM","NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-STP;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;STP=<>","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":"^Eview-STP;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;STP=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":5287,\"Code\":\"COMM-STP\",\"Name\":null,\"MessageCode\":\"COMM\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-STP;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;STP=<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-STP;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;STP=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694505682},{"Type":1,"NewValue":"{\"Id\":5287,\"Code\":\"COMM-STP\",\"Name\":null,\"MessageCode\":\"COMM\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-STP;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;STP=<>;LABEL=<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-STP;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;STP=[^;;]*;LABEL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694533081},{"Type":1,"NewValue":"{\"Id\":5287,\"Code\":\"COMM-STP\",\"Name\":null,\"MessageCode\":\"COMM\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":1,\"Template\":\"Eview-STP;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;STP=<>;LABEL=<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-STP;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;STP=[^;;]*;LABEL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694775990},{"Type":1,"NewValue":"{\"Id\":5287,\"Code\":\"STP\",\"Name\":null,\"MessageCode\":\"STEPS\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-STP;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;STP=<>;LABEL=<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-STP;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;STP=[^;;]*;LABEL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694776570},{"Type":1,"NewValue":"{\"Id\":5287,\"Code\":\"STP\",\"Name\":null,\"MessageCode\":\"STEPS\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":1,\"Template\":\"Eview-STP;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;STP=<>;LABEL=<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-STP;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;STP=[^;;]*;LABEL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694791307},{"Type":1,"NewValue":"{\"Id\":5287,\"Code\":\"STP\",\"Name\":null,\"MessageCode\":\"STEPS\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-STP;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;STP=<>;LABEL=<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-STP;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;STP=[^;;]*;LABEL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707755016}],"Tags":[]},{"Id":5853,"Code":"ACK-HRB-SMS","Name":null,"MessageCode":"ACK","NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Set heartbeat<>","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":3963,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.7","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Control Configuration Mode","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`;\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 heartbeat[^t]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":5853,\"Code\":\"ACK-HRB-SMS\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Set heartbeat<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":true,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":{\"Id\":3963,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.7\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Control Configuration Mode\",\"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`;\\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 heartbeat[^t]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1708015442},{"Type":1,"NewValue":"{\"Id\":5853,\"Code\":\"ACK-HRB-SMS\",\"Name\":null,\"MessageCode\":\"ACK\",\"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,\"Command\":{\"Id\":3963,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.8\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Control Configuration Mode\",\"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`;\\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\":[]}","Timestamp":1718697201},{"Type":1,"NewValue":"{\"Id\":5853,\"Code\":\"ACK-HRB-SMS\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Set heart beat<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"ProtocolsLibraryMethod\":null,\"ProtocolsLibraryMethodArgs\":null,\"Command\":{\"Id\":3963,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.9\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Control Configuration Mode\",\"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`;\\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\":[]}","Timestamp":1720717680}],"Tags":[]},{"Id":6943,"Code":"ACK-FIRM","Name":null,"MessageCode":"ACK","NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview;ACK-FIRM;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":3307,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.8","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Get Firmware version","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 = '02'; //Ask for firmware\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":null},"CacheImei":false,"RegEx":"^Eview;ACK-FIRM;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":6943,\"Code\":\"ACK-FIRM\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview;ACK-FIRM;<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":true,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":{\"Id\":3307,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.8\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Get Firmware version\",\"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 = '02'; //Ask for firmware\\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\":null},\"CacheImei\":false,\"RegEx\":\"^Eview;ACK-FIRM;[^;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718361723},{"Type":1,"NewValue":"{\"Id\":6943,\"Code\":\"ACK-FIRM\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview;ACK-FIRM;<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"ProtocolsLibraryMethod\":null,\"ProtocolsLibraryMethodArgs\":null,\"Command\":{\"Id\":3307,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.9\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Get Firmware version\",\"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 = '021A'; //Ask for firmware in both version\\r\\nvar command = '02';\\r\\nvar keyLength = '03';\\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' + '0500' + 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\":null},\"CacheImei\":false,\"RegEx\":\"^Eview;ACK-FIRM;[^;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1720717648}],"Tags":[]},{"Id":6944,"Code":"ACK-FIRM-SMS","Name":null,"MessageCode":"ACK","NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview;ACK-FIRM-SMS;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":3307,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.8","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Get Firmware version","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 = '02'; //Ask for firmware\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":null},"CacheImei":false,"RegEx":"^Eview;ACK-FIRM-SMS;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":6944,\"Code\":\"ACK-FIRM-SMS\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview;ACK-FIRM-SMS;<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":true,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":{\"Id\":3307,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.8\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Get Firmware version\",\"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 = '02'; //Ask for firmware\\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\":null},\"CacheImei\":false,\"RegEx\":\"^Eview;ACK-FIRM-SMS;[^;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718361803},{"Type":1,"NewValue":"{\"Id\":6944,\"Code\":\"ACK-FIRM-SMS\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview;ACK-FIRM-SMS;<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"ProtocolsLibraryMethod\":null,\"ProtocolsLibraryMethodArgs\":null,\"Command\":{\"Id\":3307,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.9\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Get Firmware version\",\"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 = '021A'; //Ask for firmware in both version\\r\\nvar command = '02';\\r\\nvar keyLength = '03';\\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' + '0500' + 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\":null},\"CacheImei\":false,\"RegEx\":\"^Eview;ACK-FIRM-SMS;[^;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1720717664}],"Tags":[]}],"Commands":[{"Id":3280,"Name":"ASet SMS Prefix","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":9,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3280,\"Name\":\"ASet SMS Prefix\",\"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\":[]}","Timestamp":1695907993}],"Tags":[]},{"Id":3281,"Name":"Set Authorised Number 4","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\nif (params.WhiteListNumber4.EnableDisableWhiteListNumber4 == '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.WhiteListNumber4.Call == 'true') {\r\n value += '1'; // Togle Call\r\n} else {\r\n value += '0';\r\n} // Untogle Call\r\nif (params.WhiteListNumber4.Number) {\r\n //Authorised number 6\r\n value += '00101'; // No SIM Dialing + Contact Number 6\r\n var number = params.WhiteListNumber4.Number;\r\n numberHex = ascii_to_hexa(number).toUpperCase();\r\n} else {\r\n value += '00101';\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\n// select version\r\nswitch (params.DeviceVersion.DeviceVersion) {\r\n case '1':\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n case '2':\r\n var key = '34';\r\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\r\n if (params.WhiteListNumber4.Name) {\r\n var nameContact = params.WhiteListNumber4.Name;\r\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\r\n } else {\r\n var nameHex = ascii_to_hexa('Contact4').toUpperCase();\r\n }\r\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\r\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\r\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n default:\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n}\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3281,\"Name\":\"Set Authorised Number 4\",\"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\\nif (params.WhiteListNumber4.EnableDisableWhiteListNumber4 == '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.WhiteListNumber4.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.WhiteListNumber4.Number) {\\r\\n //Authorised number 6\\r\\n value += '00101'; // No SIM Dialing + Contact Number 6\\r\\n var number = params.WhiteListNumber4.Number;\\r\\n numberHex = ascii_to_hexa(number).toUpperCase();\\r\\n} else {\\r\\n value += '00101';\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.WhiteListNumber4.Name) {\\r\\n var nameContact = params.WhiteListNumber4.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Contact4').toUpperCase();\\r\\n }\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908804}],"Tags":[]},{"Id":3282,"Name":"Over Speed Alert","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3282,\"Name\":\"Over Speed Alert\",\"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\":[]}","Timestamp":1695908623}],"Tags":[]},{"Id":3283,"Name":"Set Oysta Number","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3283,\"Name\":\"Set Oysta Number\",\"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\":[]}","Timestamp":1695908900}],"Tags":[]},{"Id":3285,"Name":"Alarm Clock 4","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3285,\"Name\":\"Alarm Clock 4\",\"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\":[]}","Timestamp":1695907970}],"Tags":[]},{"Id":3286,"Name":"Set Authorised Number 2","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 numberHex = '';\r\nvar value = '';\r\nif (params.WhiteListNumber2.EnableDisableWhiteListNumber2 == '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.WhiteListNumber2.Call == 'true') {\r\n value += '1'; // Togle Call\r\n} else {\r\n value += '0';\r\n} // Untogle Call\r\nif (params.WhiteListNumber2.Number) {\r\n //Authorised number 4\r\n value += '00011'; // No SIM Dialing + Contact Number 4\r\n var number = params.WhiteListNumber2.Number;\r\n numberHex = ascii_to_hexa(number).toUpperCase();\r\n} else {\r\n value += '00011';\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\n// select version\r\nswitch (params.DeviceVersion.DeviceVersion) {\r\n case '1':\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n case '2':\r\n var key = '34';\r\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\r\n if (params.WhiteListNumber2.Name) {\r\n var nameContact = params.WhiteListNumber2.Name;\r\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\r\n } else {\r\n var nameHex = ascii_to_hexa('Contact2').toUpperCase();\r\n }\r\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\r\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\r\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n default:\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n}\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3286,\"Name\":\"Set Authorised Number 2\",\"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 numberHex = '';\\r\\nvar value = '';\\r\\nif (params.WhiteListNumber2.EnableDisableWhiteListNumber2 == '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.WhiteListNumber2.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.WhiteListNumber2.Number) {\\r\\n //Authorised number 4\\r\\n value += '00011'; // No SIM Dialing + Contact Number 4\\r\\n var number = params.WhiteListNumber2.Number;\\r\\n numberHex = ascii_to_hexa(number).toUpperCase();\\r\\n} else {\\r\\n value += '00011';\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.WhiteListNumber2.Name) {\\r\\n var nameContact = params.WhiteListNumber2.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Contact2').toUpperCase();\\r\\n }\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908771}],"Tags":[]},{"Id":3288,"Name":"Power Off","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 sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '04'\nvar keyLength = '01'\nvar key = '14'\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)\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0300' + 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":[{"Type":1,"NewValue":"{\"Id\":3288,\"Name\":\"Power Off\",\"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 sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\\nvar command = '04'\\nvar keyLength = '01'\\nvar key = '14'\\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)\\n//Hpw to calculate sequenceID\\nvar prefix = 'AB10' + '0300' + 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\":[]}","Timestamp":1695908691},{"Type":1,"NewValue":"{\"Id\":3288,\"Name\":\"Power Off\",\"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\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1708014431}],"Tags":[]},{"Id":3289,"Name":"Extra Enable Control","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3289,\"Name\":\"Extra Enable Control\",\"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\":6,\"SendAttempts\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694506789},{"Type":1,"NewValue":"{\"Id\":3289,\"Name\":\"Extra Enable Control\",\"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\":6,\"SendAttempts\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692100},{"Type":1,"NewValue":"{\"Id\":3289,\"Name\":\"Extra Enable Control\",\"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\":6,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908390},{"Type":1,"NewValue":"{\"Id\":3289,\"Name\":\"Extra Enable Control\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\r\\nvar configsSMS = [];\\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\\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\nvar dataSMS = '';\\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 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 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\":6,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1711128783},{"Type":1,"NewValue":"{\"Id\":3289,\"Name\":\"Extra Enable Control\",\"TemplateSMS\":\"\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\r\\nvar configsSMS = [];\\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\\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\nvar dataSMS = '';\\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 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 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\":6,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1711478110}],"Tags":[{"Id":1645,"Name":"seventh","BackendAction":"commandPriority","Value":"6"}]},{"Id":3290,"Name":"Factory Reset","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 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);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0300' + 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":[{"Type":1,"NewValue":"{\"Id\":3290,\"Name\":\"Factory Reset\",\"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\":0,\"HasAck\":true,\"HexString\":true,\"Order\":null,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694506940},{"Type":1,"NewValue":"{\"Id\":3290,\"Name\":\"Factory Reset\",\"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!';\\nif (params.DeviceVersion.DeviceVersion == '2') {\\n dataSMS = 'ineedtoresetEV05!';\\n}\\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\":null,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694765370},{"Type":1,"NewValue":"{\"Id\":3290,\"Name\":\"Factory Reset\",\"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!';\\nif (params.DeviceVersion.DeviceVersion == '2') {\\n dataSMS = 'ineedtoresetEV05!';\\n}\\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\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908410}],"Tags":[]},{"Id":3292,"Name":"SOS Button Settings","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3292,\"Name\":\"SOS Button Settings\",\"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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692287},{"Type":1,"NewValue":"{\"Id\":3292,\"Name\":\"SOS Button Settings\",\"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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908998},{"Type":1,"NewValue":"{\"Id\":3292,\"Name\":\"SOS Button Settings\",\"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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695911479},{"Type":1,"NewValue":"{\"Id\":3292,\"Name\":\"SOS Button Settings\",\"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\":[]}","Timestamp":1695913764}],"Tags":[]},{"Id":3294,"Name":"SOS Option","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3294,\"Name\":\"SOS Option\",\"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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692312},{"Type":1,"NewValue":"{\"Id\":3294,\"Name\":\"SOS Option\",\"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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695909019},{"Type":1,"NewValue":"{\"Id\":3294,\"Name\":\"SOS Option\",\"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\":[]}","Timestamp":1695911521}],"Tags":[]},{"Id":3295,"Name":"Enable Control","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}\n// activity fuction, step counting, home-wifi location, data-saver, NLprovider, power control,\n// sos cancel switch, Long SMS, plus 7 more without functions\nvalue += '000000';\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3295,\"Name\":\"Enable Control\",\"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}\\n// activity fuction, step counting, home-wifi location, data-saver, NLprovider, power control,\\n// sos cancel switch, Long SMS, plus 7 more without functions\\nvalue += '000000';\\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\":5,\"SendAttempts\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694506753},{"Type":1,"NewValue":"{\"Id\":3295,\"Name\":\"Enable Control\",\"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}\\n// activity fuction, step counting, home-wifi location, data-saver, NLprovider, power control,\\n// sos cancel switch, Long SMS, plus 7 more without functions\\nvalue += '000000';\\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\":5,\"SendAttempts\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694506831},{"Type":1,"NewValue":"{\"Id\":3295,\"Name\":\"Enable Control\",\"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\":5,\"SendAttempts\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694508263},{"Type":1,"NewValue":"{\"Id\":3295,\"Name\":\"Enable Control\",\"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\":5,\"SendAttempts\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692073},{"Type":1,"NewValue":"{\"Id\":3295,\"Name\":\"Enable Control\",\"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\":5,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908366},{"Type":1,"NewValue":"{\"Id\":3295,\"Name\":\"Enable Control\",\"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\":5,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695909438},{"Type":1,"NewValue":"{\"Id\":3295,\"Name\":\"Enable Control\",\"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\":5,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695912175},{"Type":1,"NewValue":"{\"Id\":3295,\"Name\":\"Enable Control\",\"TemplateSMS\":\"<>\",\"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 configsSMS = [];\\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);\\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\\nvar data = prefix + messageBody;\\nAddValue('data', data);\\nAddValue('sequenceNumber', sequenceID);\\nvar dataSMS = ''; //empty\\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}\\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\":5,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1711128259},{"Type":1,"NewValue":"{\"Id\":3295,\"Name\":\"Enable Control\",\"TemplateSMS\":\"<>\",\"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 configsSMS = [];\\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);\\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\\nvar data = prefix + messageBody;\\nAddValue('data', data);\\nAddValue('sequenceNumber', sequenceID);\\nvar dataSMS = 'FAKE'; //empty\\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}\\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\":5,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1711129191},{"Type":1,"NewValue":"{\"Id\":3295,\"Name\":\"Enable Control\",\"TemplateSMS\":\"\",\"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 configsSMS = [];\\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);\\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\\nvar data = prefix + messageBody;\\nAddValue('data', data);\\nAddValue('sequenceNumber', sequenceID);\\nvar dataSMS = 'FAKE'; //empty\\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}\\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\":5,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1711478086}],"Tags":[{"Id":1644,"Name":"sixthCommand","BackendAction":"commandPriority","Value":"5"}]},{"Id":3296,"Name":"Beacon 1","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// EnableDisableSetBeacon\r\n// BeaconsDetails\r\nvar 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 beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\nif (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.SetBeacon1.BeaconName1) {\r\n var beaconString = params.SetBeacon1.BeaconName1.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}\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\n//var keyLength = '14';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\r\n//Hpw to calculate sequenceID\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 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":24,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3296,\"Name\":\"Beacon 1\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (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.SetBeacon1.BeaconName1) {\\r\\n var beaconString = params.SetBeacon1.BeaconName1.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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":1695908009},{"Type":1,"NewValue":"{\"Id\":3296,\"Name\":\"Beacon 1\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (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.SetBeacon1.BeaconName1) {\\r\\n var beaconString = params.SetBeacon1.BeaconName1.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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\":[]}","Timestamp":1719578862}],"Tags":[]},{"Id":3297,"Name":"Beacon 10","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// EnableDisableSetBeacon\r\n// BeaconsDetails\r\nvar 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 beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\nif (params.SetBeacon10.EnableDisableBeacon10 == 'true') {\r\n value += '1'; //Enable\r\n value += '0001001'; // Beacon 10\r\n //Beacon 1\r\n} else {\r\n value = '00001001';\r\n}\r\n// name, mac, major, minor\r\nif (params.SetBeacon10.BeaconName10) {\r\n var beaconString = params.SetBeacon10.BeaconName10.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}\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\n//var keyLength = '14';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\r\n//Hpw to calculate sequenceID\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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3297,\"Name\":\"Beacon 10\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (params.SetBeacon10.EnableDisableBeacon10 == 'true') {\\r\\n value += '1'; //Enable\\r\\n value += '0001001'; // Beacon 10\\r\\n //Beacon 1\\r\\n} else {\\r\\n value = '00001001';\\r\\n}\\r\\n// name, mac, major, minor\\r\\nif (params.SetBeacon10.BeaconName10) {\\r\\n var beaconString = params.SetBeacon10.BeaconName10.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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":1695908059}],"Tags":[]},{"Id":3298,"Name":"Beacon 6","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// EnableDisableSetBeacon\r\n// BeaconsDetails\r\nvar 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 beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\nif (params.SetBeacon6.EnableDisableBeacon6 == 'true') {\r\n value += '1'; //Enable\r\n value += '0000101'; // Beacon 6\r\n //Beacon 1\r\n} else {\r\n value = '00000101';\r\n}\r\n// name, mac, major, minor\r\nif (params.SetBeacon6.BeaconName6) {\r\n var beaconString = params.SetBeacon6.BeaconName6.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}\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\n//var keyLength = '14';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\r\n//Hpw to calculate sequenceID\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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3298,\"Name\":\"Beacon 6\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (params.SetBeacon6.EnableDisableBeacon6 == 'true') {\\r\\n value += '1'; //Enable\\r\\n value += '0000101'; // Beacon 6\\r\\n //Beacon 1\\r\\n} else {\\r\\n value = '00000101';\\r\\n}\\r\\n// name, mac, major, minor\\r\\nif (params.SetBeacon6.BeaconName6) {\\r\\n var beaconString = params.SetBeacon6.BeaconName6.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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":1695908144}],"Tags":[]},{"Id":3299,"Name":"Beacon 2","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// EnableDisableSetBeacon\r\n// BeaconsDetails\r\nvar 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 beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\nif (params.SetBeacon2.EnableDisableBeacon2 == 'true') {\r\n value += '1'; //Enable\r\n value += '0000001'; // Beacon 2\r\n} else {\r\n value = '00000001';\r\n}\r\n// name, mac, major, minor\r\nif (params.SetBeacon2.BeaconName2) {\r\n var beaconString = params.SetBeacon2.BeaconName2.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}\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\n//var keyLength = '14';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\r\n//Hpw to calculate sequenceID\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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3299,\"Name\":\"Beacon 2\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (params.SetBeacon2.EnableDisableBeacon2 == 'true') {\\r\\n value += '1'; //Enable\\r\\n value += '0000001'; // Beacon 2\\r\\n} else {\\r\\n value = '00000001';\\r\\n}\\r\\n// name, mac, major, minor\\r\\nif (params.SetBeacon2.BeaconName2) {\\r\\n var beaconString = params.SetBeacon2.BeaconName2.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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":1695908074}],"Tags":[]},{"Id":3300,"Name":"Beacon 3","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// EnableDisableSetBeacon\r\n// BeaconsDetails\r\nvar 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 beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\nif (params.SetBeacon3.EnableDisableBeacon3 == 'true') {\r\n value += '1'; //Enable\r\n value += '0000010'; // Beacon 3\r\n} else {\r\n value = '00000010';\r\n}\r\n// name, mac, major, minor\r\nif (params.SetBeacon3.BeaconName3) {\r\n var beaconString = params.SetBeacon3.BeaconName3.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}\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\n//var keyLength = '14';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\r\n//Hpw to calculate sequenceID\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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3300,\"Name\":\"Beacon 3\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (params.SetBeacon3.EnableDisableBeacon3 == 'true') {\\r\\n value += '1'; //Enable\\r\\n value += '0000010'; // Beacon 3\\r\\n} else {\\r\\n value = '00000010';\\r\\n}\\r\\n// name, mac, major, minor\\r\\nif (params.SetBeacon3.BeaconName3) {\\r\\n var beaconString = params.SetBeacon3.BeaconName3.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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":1695908094}],"Tags":[]},{"Id":3301,"Name":"Beacon 4","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// EnableDisableSetBeacon\r\n// BeaconsDetails\r\nvar 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 beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\nif (params.SetBeacon4.EnableDisableBeacon4 == 'true') {\r\n value += '1'; //Enable\r\n value += '0000011'; // Beacon 4\r\n} else {\r\n value = '00000011';\r\n}\r\n// name, mac, major, minor\r\nif (params.SetBeacon4.BeaconName4) {\r\n var beaconString = params.SetBeacon4.BeaconName4.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}\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\n//var keyLength = '14';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\r\n//Hpw to calculate sequenceID\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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3301,\"Name\":\"Beacon 4\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (params.SetBeacon4.EnableDisableBeacon4 == 'true') {\\r\\n value += '1'; //Enable\\r\\n value += '0000011'; // Beacon 4\\r\\n} else {\\r\\n value = '00000011';\\r\\n}\\r\\n// name, mac, major, minor\\r\\nif (params.SetBeacon4.BeaconName4) {\\r\\n var beaconString = params.SetBeacon4.BeaconName4.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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":1695908112}],"Tags":[]},{"Id":3302,"Name":"Beacon 5","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// EnableDisableSetBeacon\r\n// BeaconsDetails\r\nvar 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 beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\nif (params.SetBeacon5.EnableDisableBeacon5 == 'true') {\r\n value += '1'; //Enable\r\n value += '0000100'; // Beacon 5\r\n //Beacon 1\r\n} else {\r\n value = '00000100';\r\n}\r\n// name, mac, major, minor\r\nif (params.SetBeacon5.BeaconName5) {\r\n var beaconString = params.SetBeacon5.BeaconName5.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}\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\n//var keyLength = '14';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\r\n//Hpw to calculate sequenceID\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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3302,\"Name\":\"Beacon 5\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (params.SetBeacon5.EnableDisableBeacon5 == 'true') {\\r\\n value += '1'; //Enable\\r\\n value += '0000100'; // Beacon 5\\r\\n //Beacon 1\\r\\n} else {\\r\\n value = '00000100';\\r\\n}\\r\\n// name, mac, major, minor\\r\\nif (params.SetBeacon5.BeaconName5) {\\r\\n var beaconString = params.SetBeacon5.BeaconName5.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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":1695908127}],"Tags":[]},{"Id":3303,"Name":"Beacon 7","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// EnableDisableSetBeacon\r\n// BeaconsDetails\r\nvar 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 beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\nif (params.SetBeacon7.EnableDisableBeacon7 == 'true') {\r\n value += '1'; //Enable\r\n value += '0000110'; // Beacon 1\r\n //Beacon 1\r\n} else {\r\n value = '00000110';\r\n}\r\n// name, mac, major, minor\r\nif (params.SetBeacon7.BeaconName7) {\r\n var beaconString = params.SetBeacon7.BeaconName7.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}\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\n//var keyLength = '14';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\r\n//Hpw to calculate sequenceID\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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3303,\"Name\":\"Beacon 7\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (params.SetBeacon7.EnableDisableBeacon7 == 'true') {\\r\\n value += '1'; //Enable\\r\\n value += '0000110'; // Beacon 1\\r\\n //Beacon 1\\r\\n} else {\\r\\n value = '00000110';\\r\\n}\\r\\n// name, mac, major, minor\\r\\nif (params.SetBeacon7.BeaconName7) {\\r\\n var beaconString = params.SetBeacon7.BeaconName7.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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":1695908162}],"Tags":[]},{"Id":3304,"Name":"Beacon 9","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// EnableDisableSetBeacon\r\n// BeaconsDetails\r\nvar 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 beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\nif (params.SetBeacon9.EnableDisableBeacon9 == 'true') {\r\n value += '1'; //Enable\r\n value += '0001000'; // Beacon 9\r\n //Beacon 1\r\n} else {\r\n value = '00001000';\r\n}\r\n// name, mac, major, minor\r\nif (params.SetBeacon9.BeaconName9) {\r\n var beaconString = params.SetBeacon9.BeaconName9.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}\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\n//var keyLength = '14';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\r\n//Hpw to calculate sequenceID\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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3304,\"Name\":\"Beacon 9\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (params.SetBeacon9.EnableDisableBeacon9 == 'true') {\\r\\n value += '1'; //Enable\\r\\n value += '0001000'; // Beacon 9\\r\\n //Beacon 1\\r\\n} else {\\r\\n value = '00001000';\\r\\n}\\r\\n// name, mac, major, minor\\r\\nif (params.SetBeacon9.BeaconName9) {\\r\\n var beaconString = params.SetBeacon9.BeaconName9.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908231},{"Type":1,"NewValue":"{\"Id\":3304,\"Name\":\"Beacon 9\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (params.SetBeacon9.EnableDisableBeacon9 == 'true') {\\r\\n value += '1'; //Enable\\r\\n value += '0001000'; // Beacon 9\\r\\n //Beacon 1\\r\\n} else {\\r\\n value = '00001000';\\r\\n}\\r\\n// name, mac, major, minor\\r\\nif (params.SetBeacon9.BeaconName9) {\\r\\n var beaconString = params.SetBeacon9.BeaconName9.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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":1695909400}],"Tags":[]},{"Id":3305,"Name":"Set System Language","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.SystemLanguage.Language) {\r\n var language = params.SystemLanguage.Language;\r\n var languageHex = ascii_to_hexa(language).toUpperCase();\r\n // languageHex = changeEndianness(languageHex);\r\n}\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\n// var keyLength = ('00' + decimalToHex(2 + (languageHex.length / 2))).slice(-2).toUpperCase();\r\nvar keyLength = '06';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (languageHex.length / 2))).slice(-4).toUpperCase();\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\nvar totalLenght = '0800';\r\n//Hpw to calculate sequenceID\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3305,\"Name\":\"Set System Language\",\"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.SystemLanguage.Language) {\\r\\n var language = params.SystemLanguage.Language;\\r\\n var languageHex = ascii_to_hexa(language).toUpperCase();\\r\\n // languageHex = changeEndianness(languageHex);\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\n// var keyLength = ('00' + decimalToHex(2 + (languageHex.length / 2))).slice(-2).toUpperCase();\\r\\nvar keyLength = '06';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (languageHex.length / 2))).slice(-4).toUpperCase();\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\nvar totalLenght = '0800';\\r\\n//Hpw to calculate sequenceID\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908946}],"Tags":[]},{"Id":3306,"Name":"Voice Prompt","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":5,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3306,\"Name\":\"Voice Prompt\",\"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\":[]}","Timestamp":1695909245}],"Tags":[]},{"Id":3307,"Name":"Get Firmware version","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 = '02'; //Ask for firmware\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\n// Check always the full length\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":3,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3307,\"Name\":\"Get Firmware version\",\"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 = '02'; //Ask for firmware\\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\\n// Check always the full length\\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\":[]}","Timestamp":1695908473},{"Type":1,"NewValue":"{\"Id\":3307,\"Name\":\"Get Firmware version\",\"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 = '02'; //Ask for firmware\\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\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718360903},{"Type":1,"NewValue":"{\"Id\":3307,\"Name\":\"Get Firmware version\",\"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 = '021A'; //Ask for firmware in both version\\r\\nvar command = '02';\\r\\nvar keyLength = '03';\\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' + '0500' + 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\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718817844}],"Tags":[]},{"Id":3308,"Name":"Alarm Clock 2","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3308,\"Name\":\"Alarm Clock 2\",\"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\":[]}","Timestamp":1695907928}],"Tags":[]},{"Id":3309,"Name":"Voice Prompt Volume","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.VoicePromptVolume.Volume) {\n var volume = parseInt(params.VoicePromptVolume.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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3309,\"Name\":\"Voice Prompt Volume\",\"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.VoicePromptVolume.Volume) {\\n var volume = parseInt(params.VoicePromptVolume.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\":[]}","Timestamp":1695909306}],"Tags":[]},{"Id":3310,"Name":"Beacon 8","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// EnableDisableSetBeacon\r\n// BeaconsDetails\r\nvar 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 beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\nif (params.SetBeacon8.EnableDisableBeacon8 == 'true') {\r\n value += '1'; //Enable\r\n value += '0000111'; // Beacon 8\r\n //Beacon 1\r\n} else {\r\n value = '00000111';\r\n}\r\n// name, mac, major, minor\r\nif (params.SetBeacon8.BeaconName8) {\r\n var beaconString = params.SetBeacon8.BeaconName8.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}\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\n//var keyLength = '14';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\r\n//Hpw to calculate sequenceID\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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3310,\"Name\":\"Beacon 8\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (params.SetBeacon8.EnableDisableBeacon8 == 'true') {\\r\\n value += '1'; //Enable\\r\\n value += '0000111'; // Beacon 8\\r\\n //Beacon 1\\r\\n} else {\\r\\n value = '00000111';\\r\\n}\\r\\n// name, mac, major, minor\\r\\nif (params.SetBeacon8.BeaconName8) {\\r\\n var beaconString = params.SetBeacon8.BeaconName8.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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":1695908211}],"Tags":[]},{"Id":3311,"Name":"Fall Down Alert","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.FallAlarm.EnableDisableFallDownAlert == 'true') {\n value += '1'\n if (params.FallAlarm.Dial == 'true') {\n value += '100'\n } else {\n value += '000'\n }\n if (params.FallAlarm.Sensitivity) {\n var sensitivity = parseInt(params.FallAlarm.Sensitivity)\n sensitivity = ('0000' + decimalToBinary(sensitivity)).slice(-4).toUpperCase()\n value += sensitivity\n }\n} else {\n value = '00000000'\n}\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase()\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '02'\nvar key = '56'\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' + '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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3311,\"Name\":\"Fall Down Alert\",\"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.FallAlarm.EnableDisableFallDownAlert == 'true') {\\n value += '1'\\n if (params.FallAlarm.Dial == 'true') {\\n value += '100'\\n } else {\\n value += '000'\\n }\\n if (params.FallAlarm.Sensitivity) {\\n var sensitivity = parseInt(params.FallAlarm.Sensitivity)\\n sensitivity = ('0000' + decimalToBinary(sensitivity)).slice(-4).toUpperCase()\\n value += sensitivity\\n }\\n} else {\\n value = '00000000'\\n}\\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase()\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\\nvar command = '02'\\nvar keyLength = '02'\\nvar key = '56'\\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' + '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 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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692118},{"Type":1,"NewValue":"{\"Id\":3311,\"Name\":\"Fall Down Alert\",\"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.FallAlarm.EnableDisableFallDownAlert == 'true') {\\n value += '1'\\n if (params.FallAlarm.Dial == 'true') {\\n value += '100'\\n } else {\\n value += '000'\\n }\\n if (params.FallAlarm.Sensitivity) {\\n var sensitivity = parseInt(params.FallAlarm.Sensitivity)\\n sensitivity = ('0000' + decimalToBinary(sensitivity)).slice(-4).toUpperCase()\\n value += sensitivity\\n }\\n} else {\\n value = '00000000'\\n}\\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase()\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\\nvar command = '02'\\nvar keyLength = '02'\\nvar key = '56'\\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' + '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 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\":[]}","Timestamp":1695908430},{"Type":1,"NewValue":"{\"Id\":3311,\"Name\":\"Fall Down Alert\",\"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.FallAlarm.EnableDisableFallDownAlert == 'true') {\\n value += '1'\\n if (params.FallAlarm.Dial == 'true') {\\n value += '100'\\n } else {\\n value += '000'\\n }\\n if (params.FallAlarm.Sensitivity) {\\n var sensitivity = parseInt(params.FallAlarm.Sensitivity)\\n sensitivity = ('0000' + decimalToBinary(sensitivity)).slice(-4).toUpperCase()\\n value += sensitivity\\n }\\n} else {\\n value = '00000000'\\n}\\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase()\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\\nvar command = '02'\\nvar keyLength = '02'\\nvar key = '56'\\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' + '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 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\":3,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695939148},{"Type":1,"NewValue":"{\"Id\":3311,\"Name\":\"Fall Down Alert\",\"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.FallAlarm.EnableDisableFallDownAlert == 'true') {\\n value += '1'\\n if (params.FallAlarm.Dial == 'true') {\\n value += '100'\\n } else {\\n value += '000'\\n }\\n if (params.FallAlarm.Sensitivity) {\\n var sensitivity = parseInt(params.FallAlarm.Sensitivity)\\n sensitivity = ('0000' + decimalToBinary(sensitivity)).slice(-4).toUpperCase()\\n value += sensitivity\\n }\\n} else {\\n value = '00000000'\\n}\\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase()\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\\nvar command = '02'\\nvar keyLength = '02'\\nvar key = '56'\\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' + '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 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\":[]}","Timestamp":1696443207}],"Tags":[]},{"Id":3312,"Name":"Alarm Clock 3","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3312,\"Name\":\"Alarm Clock 3\",\"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\":[]}","Timestamp":1695907948}],"Tags":[]},{"Id":3315,"Name":"Device Reboot","TemplateSMS":null,"Template":null,"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 sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '04'\nvar keyLength = '01'\nvar key = '12'\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)\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0300' + 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":[{"Type":1,"NewValue":"{\"Id\":3315,\"Name\":\"Device Reboot\",\"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\":null,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694506441},{"Type":1,"NewValue":"{\"Id\":3315,\"Name\":\"Device Reboot\",\"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\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908342}],"Tags":[]},{"Id":3316,"Name":"Welfare Check","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 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' + '0B00' + 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":9,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3316,\"Name\":\"Welfare Check\",\"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 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' + '0B00' + 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\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507593},{"Type":1,"NewValue":"{\"Id\":3316,\"Name\":\"Welfare Check\",\"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 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' + '0B00' + 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\":[]}","Timestamp":1695909332},{"Type":1,"NewValue":"{\"Id\":3316,\"Name\":\"Welfare Check\",\"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 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' + '0B00' + 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\":[]}","Timestamp":1695911565},{"Type":1,"NewValue":"{\"Id\":3316,\"Name\":\"Welfare Check\",\"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\":[]}","Timestamp":1696607872}],"Tags":[]},{"Id":3317,"Name":"Working Mode","TemplateSMS":"","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// Check selected working mode\r\nif (params.WorkingMode.Mode) {\r\n var mode = params.WorkingMode.Mode;\r\n} else {\r\n var mode = '06';\r\n} // default mode 6\r\n// for model with time interval\r\nswitch (mode) {\r\n case '04':\r\n case '05':\r\n if (params.WorkingMode.TimeInterval) {\r\n var value = parseInt(params.WorkingMode.TimeInterval) * 60;\r\n value = decimalToHex(value);\r\n value = ('000000' + value).slice(-6).toUpperCase();\r\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\r\n } else {\r\n var value = 60 * 60; // default value 60*60\r\n value = decimalToHex(value);\r\n value = ('000000' + value).slice(-6).toUpperCase();\r\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\r\n } // default mode 6\r\n break;\r\n default:\r\n var value = '';\r\n value += '000000'; // Time interval to zero\r\n}\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '05';\r\nvar key = '0A';\r\nvar messageBody = command + keyLength + key + value + mode;\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' + '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}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3317,\"Name\":\"Working Mode\",\"TemplateSMS\":\"\",\"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// Check selected working mode\\r\\nif (params.WorkingMode.Mode) {\\r\\n var mode = params.WorkingMode.Mode;\\r\\n} else {\\r\\n var mode = '06';\\r\\n} // default mode 6\\r\\n// for model with time interval\\r\\nswitch (mode) {\\r\\n case '04':\\r\\n case '05':\\r\\n if (params.WorkingMode.TimeInterval) {\\r\\n var value = parseInt(params.WorkingMode.TimeInterval) * 60;\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n } else {\\r\\n var value = 60 * 60; // default value 60*60\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n } // default mode 6\\r\\n break;\\r\\n default:\\r\\n var value = '';\\r\\n value += '000000'; // Time interval to zero\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar keyLength = '05';\\r\\nvar key = '0A';\\r\\nvar messageBody = command + keyLength + key + value + mode;\\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' + '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}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507637},{"Type":1,"NewValue":"{\"Id\":3317,\"Name\":\"Working Mode\",\"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 localTesting = \\\"False\\\";\\r\\nif (localTesting) var params = {\\r\\n 'CycleInterval': {\\r\\n 'CycleInterval': 10,\\r\\n 'LazyCycleInterval': 60\\r\\n },\\r\\n 'WorkingMode': {\\r\\n 'Mode': '06'\\r\\n }\\r\\n};\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Select Communicate behaviour of the Rio.\\r\\n// Cycle = C; Heartbeat = H; Lazy Cycle = LC. \\r\\n//Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\\r\\n// load parameters Cycle interval and Lazy cycle interval\\r\\nif (params.CycleInterval.CycleInterval) {\\r\\n var cycleInterval = parseInt(params.CycleInterval.CycleInterval) * 60;\\r\\n} else var cycleInterval = 600;\\r\\nif (params.CycleInterval.LazyCycleInterval) {\\r\\n var lazyCycleInterval = parseInt(params.CycleInterval.LazyCycleInterval) * 60;\\r\\n} else var lazyCycleInterval = 3600;\\r\\n// Check selected working mode\\r\\nif (params.WorkingMode.Mode) {\\r\\n var mode = params.WorkingMode.Mode;\\r\\n} else {\\r\\n var mode = '06';\\r\\n} // default mode 6\\r\\nswitch (mode) {\\r\\n case '02':\\r\\n case '06':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M,' + lazyCycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '03':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '04':\\r\\n case '05':\\r\\n if (lazyCycleInterval) {\\r\\n var value = parseInt(lazyCycleInterval);\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + lazyCycleInterval / 60 + 'M';\\r\\n } else {\\r\\n var value = 60 * 60; // default value 60*60 seconds\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + 60 + 'M';\\r\\n }\\r\\n break;\\r\\n default:\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = '';\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar keyLength = '05';\\r\\nvar key = '0A';\\r\\nvar messageBody = command + keyLength + key + value + mode;\\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' + '0700' + 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 = 'mode' + mode.substring(1) + valueSMS;\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\ndebug(data);\\r\\ndebug(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 debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694865115},{"Type":1,"NewValue":"{\"Id\":3317,\"Name\":\"Working Mode\",\"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 localTesting = \\\"False\\\";\\r\\nif (localTesting) var params = {\\r\\n 'CycleInterval': {\\r\\n 'CycleInterval': 10,\\r\\n 'LazyCycleInterval': 60\\r\\n },\\r\\n 'WorkingMode': {\\r\\n 'Mode': '06'\\r\\n }\\r\\n};\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Select Communicate behaviour of the Rio.\\r\\n// Cycle = C; Heartbeat = H; Lazy Cycle = LC. \\r\\n//Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\\r\\n// load parameters Cycle interval and Lazy cycle interval\\r\\nif (params.CycleInterval.CycleInterval) {\\r\\n var cycleInterval = parseInt(params.CycleInterval.CycleInterval) * 60;\\r\\n} else var cycleInterval = 600;\\r\\nif (params.CycleInterval.LazyCycleInterval) {\\r\\n var lazyCycleInterval = parseInt(params.CycleInterval.LazyCycleInterval) * 60;\\r\\n} else var lazyCycleInterval = 3600;\\r\\n// Check selected working mode\\r\\nif (params.WorkingMode.Mode) {\\r\\n var mode = params.WorkingMode.Mode;\\r\\n} else {\\r\\n var mode = '06';\\r\\n} // default mode 6\\r\\nswitch (mode) {\\r\\n case '02':\\r\\n case '06':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M,' + lazyCycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '03':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '04':\\r\\n case '05':\\r\\n if (lazyCycleInterval) {\\r\\n var value = parseInt(lazyCycleInterval);\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + lazyCycleInterval / 60 + 'M';\\r\\n } else {\\r\\n var value = 60 * 60; // default value 60*60 seconds\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + 60 + 'M';\\r\\n }\\r\\n break;\\r\\n default:\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = '';\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar keyLength = '05';\\r\\nvar key = '0A';\\r\\nvar messageBody = command + keyLength + key + value + mode;\\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' + '0700' + 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 = 'mode' + mode.substring(1) + valueSMS;\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\ndebug(data);\\r\\ndebug(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 debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695909366},{"Type":1,"NewValue":"{\"Id\":3317,\"Name\":\"Working Mode\",\"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 localTesting = \\\"False\\\";\\r\\nif (localTesting) var params = {\\r\\n 'CycleInterval': {\\r\\n 'CycleInterval': 10,\\r\\n 'LazyCycleInterval': 60\\r\\n },\\r\\n 'WorkingMode': {\\r\\n 'Mode': '06'\\r\\n }\\r\\n};\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Select Communicate behaviour of the Rio.\\r\\n// Cycle = C; Heartbeat = H; Lazy Cycle = LC. \\r\\n//Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\\r\\n// load parameters Cycle interval and Lazy cycle interval\\r\\nif (params.CycleInterval.CycleInterval) {\\r\\n var cycleInterval = parseInt(params.CycleInterval.CycleInterval) * 60;\\r\\n} else var cycleInterval = 600;\\r\\nif (params.CycleInterval.LazyCycleInterval) {\\r\\n var lazyCycleInterval = parseInt(params.CycleInterval.LazyCycleInterval) * 60;\\r\\n} else var lazyCycleInterval = 3600;\\r\\n// Check selected working mode\\r\\nif (params.WorkingMode.Mode) {\\r\\n var mode = params.WorkingMode.Mode;\\r\\n} else {\\r\\n var mode = '06';\\r\\n} // default mode 6\\r\\nswitch (mode) {\\r\\n case '02':\\r\\n case '06':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M,' + lazyCycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '03':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '04':\\r\\n case '05':\\r\\n if (lazyCycleInterval) {\\r\\n var value = parseInt(lazyCycleInterval);\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + lazyCycleInterval / 60 + 'M';\\r\\n } else {\\r\\n var value = 60 * 60; // default value 60*60 seconds\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + 60 + 'M';\\r\\n }\\r\\n break;\\r\\n default:\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = '';\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar keyLength = '05';\\r\\nvar key = '0A';\\r\\nvar messageBody = command + keyLength + key + value + mode;\\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' + '0700' + 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 = 'mode' + mode.substring(1) + valueSMS;\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\ndebug(data);\\r\\ndebug(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 debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":1,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1696074187},{"Type":1,"NewValue":"{\"Id\":3317,\"Name\":\"Working Mode\",\"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 localTesting = \\\"False\\\";\\r\\nif (localTesting) var params = {\\r\\n 'CycleInterval': {\\r\\n 'CycleInterval': 10,\\r\\n 'LazyCycleInterval': 60\\r\\n },\\r\\n 'WorkingMode': {\\r\\n 'Mode': '06'\\r\\n }\\r\\n};\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Select Communicate behaviour of the Rio.\\r\\n// Cycle = C; Heartbeat = H; Lazy Cycle = LC. \\r\\n//Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\\r\\n// load parameters Cycle interval and Lazy cycle interval\\r\\nif (params.CycleInterval.CycleInterval) {\\r\\n var cycleInterval = parseInt(params.CycleInterval.CycleInterval) * 60;\\r\\n} else var cycleInterval = 600;\\r\\nif (params.CycleInterval.LazyCycleInterval) {\\r\\n var lazyCycleInterval = parseInt(params.CycleInterval.LazyCycleInterval) * 60;\\r\\n} else var lazyCycleInterval = 3600;\\r\\n// Check selected working mode\\r\\nif (params.WorkingMode.Mode) {\\r\\n var mode = params.WorkingMode.Mode;\\r\\n} else {\\r\\n var mode = '06';\\r\\n} // default mode 6\\r\\nswitch (mode) {\\r\\n case '02':\\r\\n case '06':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M,' + lazyCycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '03':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '04':\\r\\n case '05':\\r\\n if (lazyCycleInterval) {\\r\\n var value = parseInt(lazyCycleInterval);\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + lazyCycleInterval / 60 + 'M';\\r\\n } else {\\r\\n var value = 60 * 60; // default value 60*60 seconds\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + 60 + 'M';\\r\\n }\\r\\n break;\\r\\n default:\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = '';\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar keyLength = '05';\\r\\nvar key = '0A';\\r\\nvar messageBody = command + keyLength + key + value + mode;\\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' + '0700' + 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 = 'mode' + mode.substring(1) + valueSMS;\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\ndebug(data);\\r\\ndebug(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 debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1697011851},{"Type":1,"NewValue":"{\"Id\":3317,\"Name\":\"Working Mode\",\"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 localTesting = \\\"False\\\";\\r\\nif (localTesting) var params = {\\r\\n 'CycleInterval': {\\r\\n 'CycleInterval': 10,\\r\\n 'LazyCycleInterval': 60\\r\\n },\\r\\n 'WorkingMode': {\\r\\n 'Mode': '06'\\r\\n }\\r\\n};\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Select Communicate behaviour of the Rio.\\r\\n// Cycle = C; Heartbeat = H; Lazy Cycle = LC. \\r\\n//Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\\r\\n// load parameters Cycle interval and Lazy cycle interval\\r\\nif (params.CycleInterval.CycleInterval) {\\r\\n var cycleInterval = parseInt(params.CycleInterval.CycleInterval) * 60;\\r\\n} else var cycleInterval = 600;\\r\\nif (params.CycleInterval.LazyCycleInterval) {\\r\\n var lazyCycleInterval = parseInt(params.CycleInterval.LazyCycleInterval) * 60;\\r\\n} else var lazyCycleInterval = 3600;\\r\\n// Check selected working mode\\r\\nif (params.WorkingMode.Mode) {\\r\\n var mode = params.WorkingMode.Mode;\\r\\n} else {\\r\\n var mode = '06';\\r\\n} // default mode 6\\r\\n// improve command to add both GPRS and SMS comunication\\r\\nswitch (mode) {\\r\\n case '02':\\r\\n case '06':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M,' + lazyCycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '03':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '04':\\r\\n case '05':\\r\\n if (lazyCycleInterval) {\\r\\n var value = parseInt(lazyCycleInterval);\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + lazyCycleInterval / 60 + 'M';\\r\\n } else {\\r\\n var value = 60 * 60; // default value 60*60 seconds\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + 60 + 'M';\\r\\n }\\r\\n break;\\r\\n default:\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = '';\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar keyLength = '05';\\r\\nvar key = '0A';\\r\\nvar messageBody = command + keyLength + key + value + mode;\\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' + '0700' + 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 = 'mode' + mode.substring(1) + valueSMS;\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\ndebug(data);\\r\\ndebug(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 debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707755363},{"Type":1,"NewValue":"{\"Id\":3317,\"Name\":\"Working Mode\",\"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 localTesting = false;\\r\\nif (localTesting) var params = {\\r\\n 'CycleInterval': {\\r\\n 'CycleInterval': 10,\\r\\n 'LazyCycleInterval': 60\\r\\n },\\r\\n 'WorkingMode': {\\r\\n 'Mode': '06'\\r\\n }\\r\\n};\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Select Communicate behaviour of the Rio.\\r\\n// Cycle = C; Heartbeat = H; Lazy Cycle = LC. \\r\\n//Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\\r\\n// load parameters Cycle interval and Lazy cycle interval\\r\\nif (params.CycleInterval.CycleInterval) {\\r\\n var cycleInterval = parseInt(params.CycleInterval.CycleInterval) * 60;\\r\\n} else var cycleInterval = 600;\\r\\nif (params.CycleInterval.LazyCycleInterval) {\\r\\n var lazyCycleInterval = parseInt(params.CycleInterval.LazyCycleInterval) * 60;\\r\\n} else var lazyCycleInterval = 3600;\\r\\n// Check selected working mode\\r\\nif (params.WorkingMode.Mode) {\\r\\n var mode = params.WorkingMode.Mode;\\r\\n} else {\\r\\n var mode = '06';\\r\\n} // default mode 6\\r\\n// improve command to add both GPRS and SMS comunication\\r\\nswitch (mode) {\\r\\n case '02':\\r\\n case '06':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M,' + lazyCycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '03':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '04':\\r\\n case '05':\\r\\n if (lazyCycleInterval) {\\r\\n var value = parseInt(lazyCycleInterval);\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + lazyCycleInterval / 60 + 'M';\\r\\n } else {\\r\\n var value = 60 * 60; // default value 60*60 seconds\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + 60 + 'M';\\r\\n }\\r\\n break;\\r\\n default:\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = '';\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar keyLength = '05';\\r\\nvar key = '0A';\\r\\nvar messageBody = command + keyLength + key + value + mode;\\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' + '0700' + 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 = 'mode' + mode.substring(1) + valueSMS;\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\ndebug(data);\\r\\ndebug(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 debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707850781},{"Type":1,"NewValue":"{\"Id\":3317,\"Name\":\"Working Mode\",\"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 localTesting = false;\\r\\nif (localTesting) var params = {\\r\\n 'CycleInterval': {\\r\\n 'CycleInterval': 10,\\r\\n 'LazyCycleInterval': 60\\r\\n },\\r\\n 'WorkingMode': {\\r\\n 'Mode': '06'\\r\\n }\\r\\n};\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Select Communicate behaviour of the Rio.\\r\\n// Cycle = C; Heartbeat = H; Lazy Cycle = LC. \\r\\n//Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\\r\\n// load parameters Cycle interval and Lazy cycle interval\\r\\nif (params.CycleInterval.CycleInterval) {\\r\\n var cycleInterval = parseInt(params.CycleInterval.CycleInterval) * 60;\\r\\n} else var cycleInterval = 600;\\r\\nif (params.CycleInterval.LazyCycleInterval) {\\r\\n var lazyCycleInterval = parseInt(params.CycleInterval.LazyCycleInterval) * 60;\\r\\n} else var lazyCycleInterval = 3600;\\r\\n// Check selected working mode\\r\\nif (params.WorkingMode.Mode) {\\r\\n var mode = params.WorkingMode.Mode;\\r\\n} else {\\r\\n var mode = '06';\\r\\n} // default mode 6\\r\\n// improve command to add both GPRS and SMS comunication\\r\\nswitch (mode) {\\r\\n case '02':\\r\\n case '06':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M,' + lazyCycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '03':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '04':\\r\\n case '05': // add time interval to the command\\r\\n if (cycleInterval) {\\r\\n var value = parseInt(cycleInterval);\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M';\\r\\n } else {\\r\\n var value = 60 * 60; // default value 60*60 seconds\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + 60 + 'M';\\r\\n }\\r\\n break;\\r\\n default:\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = '';\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar keyLength = '05';\\r\\nvar key = '0A';\\r\\nvar messageBody = command + keyLength + key + value + mode;\\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' + '0700' + 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 = 'mode' + mode.substring(1) + valueSMS;\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\ndebug(data);\\r\\ndebug(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 debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1733949050}],"Tags":[{"Id":1647,"Name":"thirdCommand","BackendAction":"commandPriority","Value":"2"}]},{"Id":3318,"Name":"RingTone Volume","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.RingToneVolume.Volume) {\n var volume = parseInt(params.RingToneVolume.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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3318,\"Name\":\"RingTone Volume\",\"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.RingToneVolume.Volume) {\\n var volume = parseInt(params.RingToneVolume.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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692228},{"Type":1,"NewValue":"{\"Id\":3318,\"Name\":\"RingTone Volume\",\"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.RingToneVolume.Volume) {\\n var volume = parseInt(params.RingToneVolume.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\":[]}","Timestamp":1695908725}],"Tags":[]},{"Id":3319,"Name":"Speaker Volume","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.SpeakerVolume.Volume) {\n var volume = parseInt(params.SpeakerVolume.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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3319,\"Name\":\"Speaker Volume\",\"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.SpeakerVolume.Volume) {\\n var volume = parseInt(params.SpeakerVolume.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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692359},{"Type":1,"NewValue":"{\"Id\":3319,\"Name\":\"Speaker Volume\",\"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.SpeakerVolume.Volume) {\\n var volume = parseInt(params.SpeakerVolume.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\":[]}","Timestamp":1695909040}],"Tags":[]},{"Id":3320,"Name":"Alarm Clock 1","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3320,\"Name\":\"Alarm Clock 1\",\"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\":[]}","Timestamp":1695907904}],"Tags":[]},{"Id":3321,"Name":"No Disturb","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.NoDisturb.EnableDisableNoDisturb == 'true') {\n var flag = '80';\n if (params.NoDisturb.Start) {\n var hourStart = params.NoDisturb.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.NoDisturb.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.NoDisturb.End) {\n var hourEnd = params.NoDisturb.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.NoDisturb.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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3321,\"Name\":\"No Disturb\",\"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.NoDisturb.EnableDisableNoDisturb == 'true') {\\n var flag = '80';\\n if (params.NoDisturb.Start) {\\n var hourStart = params.NoDisturb.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.NoDisturb.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.NoDisturb.End) {\\n var hourEnd = params.NoDisturb.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.NoDisturb.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\":[]}","Timestamp":1695908583},{"Type":1,"NewValue":"{\"Id\":3321,\"Name\":\"No Disturb\",\"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\":[]}","Timestamp":1698145878}],"Tags":[]},{"Id":3322,"Name":"Speed Dial","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.SpeedDialButtonSettings.EnableDisableSpeedDial == 'true') {\n value += '10';\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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3322,\"Name\":\"Speed Dial\",\"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.SpeedDialButtonSettings.EnableDisableSpeedDial == 'true') {\\n value += '10';\\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 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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692383},{"Type":1,"NewValue":"{\"Id\":3322,\"Name\":\"Speed Dial\",\"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.SpeedDialButtonSettings.EnableDisableSpeedDial == 'true') {\\n value += '10';\\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 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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695909062},{"Type":1,"NewValue":"{\"Id\":3322,\"Name\":\"Speed Dial\",\"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.SpeedDialButtonSettings.EnableDisableSpeedDial == 'true') {\\n value += '10';\\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 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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695935979},{"Type":1,"NewValue":"{\"Id\":3322,\"Name\":\"Speed Dial\",\"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.SpeedDialButtonSettings.EnableDisableSpeedDial == 'true') {\\n value += '10';\\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 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\":[]}","Timestamp":1696443459}],"Tags":[]},{"Id":3323,"Name":"Motion Alert","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3323,\"Name\":\"Motion Alert\",\"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\":[]}","Timestamp":1695908563}],"Tags":[]},{"Id":3324,"Name":"No Motion Alert","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.NonMovementAlert.EnableDisableNoMotionAlert == 'true') {\n value += '1'\n if (params.NonMovementAlert.Dial == 'true') {\n value += '1'\n } else {\n value += '0'\n }\n if (params.NonMovementAlert.Time) {\n var time = ('000000000000000000000000000000' + decimalToBinary(params.NonMovementAlert.Time)).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)\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3324,\"Name\":\"No Motion Alert\",\"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.NonMovementAlert.EnableDisableNoMotionAlert == 'true') {\\n value += '1'\\n if (params.NonMovementAlert.Dial == 'true') {\\n value += '1'\\n } else {\\n value += '0'\\n }\\n if (params.NonMovementAlert.Time) {\\n var time = ('000000000000000000000000000000' + decimalToBinary(params.NonMovementAlert.Time)).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)\\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\":[]}","Timestamp":1695908608}],"Tags":[]},{"Id":3325,"Name":"Request Location","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":true,"Order":null,"SendAttempts":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3325,\"Name\":\"Request Location\",\"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\":true,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908709}],"Tags":[]},{"Id":3326,"Name":"Set Authorised Number 5","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\nif (params.WhiteListNumber5.EnableDisableWhiteListNumber5 == '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.WhiteListNumber5.Call == 'true') {\r\n value += '1'; // Togle Call\r\n} else {\r\n value += '0';\r\n} // Untogle Call\r\nif (params.WhiteListNumber5.Number) {\r\n //Authorised number 7\r\n value += '00110'; // No SIM Dialing + Contact Number 7\r\n var number = params.WhiteListNumber5.Number;\r\n numberHex = ascii_to_hexa(number).toUpperCase();\r\n} else {\r\n value += '00110';\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\n// select version\r\nswitch (params.DeviceVersion.DeviceVersion) {\r\n case '1':\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n case '2':\r\n var key = '34';\r\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\r\n if (params.WhiteListNumber5.Name) {\r\n var nameContact = params.WhiteListNumber5.Name;\r\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\r\n } else {\r\n var nameHex = ascii_to_hexa('Contact5').toUpperCase();\r\n }\r\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\r\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\r\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n default:\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n}\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3326,\"Name\":\"Set Authorised Number 5\",\"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\\nif (params.WhiteListNumber5.EnableDisableWhiteListNumber5 == '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.WhiteListNumber5.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.WhiteListNumber5.Number) {\\r\\n //Authorised number 7\\r\\n value += '00110'; // No SIM Dialing + Contact Number 7\\r\\n var number = params.WhiteListNumber5.Number;\\r\\n numberHex = ascii_to_hexa(number).toUpperCase();\\r\\n} else {\\r\\n value += '00110';\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.WhiteListNumber5.Name) {\\r\\n var nameContact = params.WhiteListNumber5.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Contact5').toUpperCase();\\r\\n }\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908820}],"Tags":[]},{"Id":3328,"Name":"SMS Password","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3328,\"Name\":\"SMS Password\",\"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\":[]}","Timestamp":1695908977}],"Tags":[]},{"Id":3329,"Name":"Find Device","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 sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '04'\nvar keyLength = '01'\nvar key = '13'\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)\n//Hpw to calculate sequenceID\n// 11/07 change 18 in prefix by 10\nvar prefix = 'AB10' + '0300' + 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3329,\"Name\":\"Find Device\",\"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 sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\\nvar command = '04'\\nvar keyLength = '01'\\nvar key = '13'\\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)\\n//Hpw to calculate sequenceID\\n// 11/07 change 18 in prefix by 10\\nvar prefix = 'AB10' + '0300' + 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\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908450},{"Type":1,"NewValue":"{\"Id\":3329,\"Name\":\"Find Device\",\"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 sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\\nvar command = '04'\\nvar keyLength = '01'\\nvar key = '13'\\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)\\n//Hpw to calculate sequenceID\\n// 11/07 change 18 in prefix by 10\\nvar prefix = 'AB10' + '0300' + 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\":[]}","Timestamp":1695909472}],"Tags":[]},{"Id":3330,"Name":"Tilt Alert","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3330,\"Name\":\"Tilt Alert\",\"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\":34,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692419},{"Type":1,"NewValue":"{\"Id\":3330,\"Name\":\"Tilt Alert\",\"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\":[]}","Timestamp":1695909174}],"Tags":[]},{"Id":3331,"Name":"Phone Settings","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 = '00000000000000000000'\nif (params.PhoneSettings.SMSWhiteList == 'true') {\n value += '10'\n} else {\n value += '00'\n}\nif (params.PhoneSettings.ButtonHangUp == 'true') {\n value += '1'\n} else {\n value += '0'\n}\nif (params.PhoneSettings.WhiteList == 'true') {\n value += '1'\n} else {\n value += '0'\n}\nif (params.PhoneSettings.AutoAnswer == 'true') {\n value += '1'\n value += ('0000000' + decimalToBinary(parseInt(params.PhoneSettings.AutoAnswerAfterRings))).slice(-7)\n} else {\n value += '00000000'\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 = '33'\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3331,\"Name\":\"Phone Settings\",\"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\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694531081},{"Type":1,"NewValue":"{\"Id\":3331,\"Name\":\"Phone Settings\",\"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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692178},{"Type":1,"NewValue":"{\"Id\":3331,\"Name\":\"Phone Settings\",\"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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908646},{"Type":1,"NewValue":"{\"Id\":3331,\"Name\":\"Phone Settings\",\"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\":[]}","Timestamp":1695939190}],"Tags":[]},{"Id":3332,"Name":"Mic Volume","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3332,\"Name\":\"Mic Volume\",\"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\":[]}","Timestamp":1695908524}],"Tags":[]},{"Id":3333,"Name":"Delete Records","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 sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '04';\nvar keyLength = '01';\nvar key = '10';\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);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0300' + 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":[{"Type":1,"NewValue":"{\"Id\":3333,\"Name\":\"Delete Records\",\"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 sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\nvar command = '04';\\nvar keyLength = '01';\\nvar key = '10';\\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);\\n//Hpw to calculate sequenceID\\nvar prefix = 'AB10' + '0300' + 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\":[]}","Timestamp":1695908318},{"Type":1,"NewValue":"{\"Id\":3333,\"Name\":\"Delete Records\",\"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 sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\nvar command = '04';\\nvar keyLength = '01';\\nvar key = '10';\\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);\\n//Hpw to calculate sequenceID\\nvar prefix = 'AB10' + '0300' + 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\":3,\"HasAck\":true,\"HexString\":true,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1708013025}],"Tags":[]},{"Id":3334,"Name":"Set Authorised Number 1","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\nif (params.WhiteListNumber1.EnableDisableWhiteListNumber1 == '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.WhiteListNumber1.Call == 'true') {\r\n value += '1'; // Togle Call\r\n} else {\r\n value += '0';\r\n} // Untogle Call\r\nif (params.WhiteListNumber1.Number) {\r\n //Authorised number 3\r\n value += '00010'; // No SIM Dialing + Contact Number 3\r\n var number = params.WhiteListNumber1.Number;\r\n numberHex = ascii_to_hexa(number).toUpperCase();\r\n} else {\r\n value += '00010';\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\n// select version\r\nswitch (params.DeviceVersion.DeviceVersion) {\r\n case '1':\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n case '2':\r\n var key = '34';\r\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\r\n if (params.WhiteListNumber1.Name) {\r\n var nameContact = params.WhiteListNumber1.Name;\r\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\r\n } else {\r\n var nameHex = ascii_to_hexa('Contact1').toUpperCase();\r\n }\r\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\r\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\r\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n default:\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n}\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3334,\"Name\":\"Set Authorised Number 1\",\"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\\nif (params.WhiteListNumber1.EnableDisableWhiteListNumber1 == '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.WhiteListNumber1.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.WhiteListNumber1.Number) {\\r\\n //Authorised number 3\\r\\n value += '00010'; // No SIM Dialing + Contact Number 3\\r\\n var number = params.WhiteListNumber1.Number;\\r\\n numberHex = ascii_to_hexa(number).toUpperCase();\\r\\n} else {\\r\\n value += '00010';\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.WhiteListNumber1.Name) {\\r\\n var nameContact = params.WhiteListNumber1.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Contact1').toUpperCase();\\r\\n }\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908749}],"Tags":[]},{"Id":3335,"Name":"Continuous Locate","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3335,\"Name\":\"Continuous Locate\",\"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\":4,\"SendAttempts\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694506592},{"Type":1,"NewValue":"{\"Id\":3335,\"Name\":\"Continuous Locate\",\"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\":4,\"SendAttempts\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694506608},{"Type":1,"NewValue":"{\"Id\":3335,\"Name\":\"Continuous Locate\",\"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\":4,\"SendAttempts\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692011},{"Type":1,"NewValue":"{\"Id\":3335,\"Name\":\"Continuous Locate\",\"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\":4,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908255},{"Type":1,"NewValue":"{\"Id\":3335,\"Name\":\"Continuous Locate\",\"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\":4,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695912146}],"Tags":[{"Id":1642,"Name":"fifthCommand","BackendAction":"commandPriority","Value":"4"}]},{"Id":3336,"Name":"Initialize Mileage","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3336,\"Name\":\"Initialize Mileage\",\"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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908503}],"Tags":[]},{"Id":3337,"Name":"Set Authorised Number 7","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\nif (params.WhiteListNumber7.EnableDisableWhiteListNumber7 == '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.WhiteListNumber7.Call == 'true') {\r\n value += '1'; // Togle Call\r\n} else {\r\n value += '0';\r\n} // Untogle Call\r\nif (params.WhiteListNumber7.Number) {\r\n //Authorised number 9\r\n value += '01000'; // No SIM Dialing + Contact Number 9\r\n var number = params.WhiteListNumber7.Number;\r\n numberHex = ascii_to_hexa(number).toUpperCase();\r\n} else {\r\n value += '01000';\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\n// select version\r\nswitch (params.DeviceVersion.DeviceVersion) {\r\n case '1':\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n case '2':\r\n var key = '34';\r\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\r\n if (params.WhiteListNumber7.Name) {\r\n var nameContact = params.WhiteListNumber7.Name;\r\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\r\n } else {\r\n var nameHex = ascii_to_hexa('Contact7').toUpperCase();\r\n }\r\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\r\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\r\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n default:\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n}\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3337,\"Name\":\"Set Authorised Number 7\",\"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\\nif (params.WhiteListNumber7.EnableDisableWhiteListNumber7 == '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.WhiteListNumber7.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.WhiteListNumber7.Number) {\\r\\n //Authorised number 9\\r\\n value += '01000'; // No SIM Dialing + Contact Number 9\\r\\n var number = params.WhiteListNumber7.Number;\\r\\n numberHex = ascii_to_hexa(number).toUpperCase();\\r\\n} else {\\r\\n value += '01000';\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.WhiteListNumber7.Name) {\\r\\n var nameContact = params.WhiteListNumber7.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Contact7').toUpperCase();\\r\\n }\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908858}],"Tags":[]},{"Id":3338,"Name":"Set Authorised Number 8","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\nif (params.WhiteListNumber8.EnableDisableWhiteListNumber8 == '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.WhiteListNumber8.Call == 'true') {\r\n value += '1'; // Togle Call\r\n} else {\r\n value += '0';\r\n} // Untogle Call\r\nif (params.WhiteListNumber8.Number) {\r\n //Authorised number 10\r\n value += '01001'; // No SIM Dialing + Contact Number 10\r\n var number = params.WhiteListNumber8.Number;\r\n numberHex = ascii_to_hexa(number).toUpperCase();\r\n} else {\r\n value += '01001';\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\n// select version\r\nswitch (params.DeviceVersion.DeviceVersion) {\r\n case '1':\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n case '2':\r\n var key = '34';\r\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\r\n if (params.WhiteListNumber8.Name) {\r\n var nameContact = params.WhiteListNumber8.Name;\r\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\r\n } else {\r\n var nameHex = ascii_to_hexa('Contact8').toUpperCase();\r\n }\r\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\r\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\r\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n default:\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n}\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3338,\"Name\":\"Set Authorised Number 8\",\"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\\nif (params.WhiteListNumber8.EnableDisableWhiteListNumber8 == '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.WhiteListNumber8.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.WhiteListNumber8.Number) {\\r\\n //Authorised number 10\\r\\n value += '01001'; // No SIM Dialing + Contact Number 10\\r\\n var number = params.WhiteListNumber8.Number;\\r\\n numberHex = ascii_to_hexa(number).toUpperCase();\\r\\n} else {\\r\\n value += '01001';\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.WhiteListNumber8.Name) {\\r\\n var nameContact = params.WhiteListNumber8.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Contact8').toUpperCase();\\r\\n }\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908883}],"Tags":[]},{"Id":3339,"Name":"Set Authorised Number 6","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\nif (params.WhiteListNumber6.EnableDisableWhiteListNumber6 == '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.WhiteListNumber6.Call == 'true') {\r\n value += '1'; // Togle Call\r\n} else {\r\n value += '0';\r\n} // Untogle Call\r\nif (params.WhiteListNumber6.Number) {\r\n //Authorised number 8\r\n value += '00111'; // No SIM Dialing + Contact Number 8\r\n var number = params.WhiteListNumber6.Number;\r\n numberHex = ascii_to_hexa(number).toUpperCase();\r\n} else {\r\n value += '00111';\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\n// select version\r\nswitch (params.DeviceVersion.DeviceVersion) {\r\n case '1':\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n case '2':\r\n var key = '34';\r\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\r\n if (params.WhiteListNumber6.Name) {\r\n var nameContact = params.WhiteListNumber6.Name;\r\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\r\n } else {\r\n var nameHex = ascii_to_hexa('Contact6').toUpperCase();\r\n }\r\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\r\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\r\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n default:\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n}\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":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3339,\"Name\":\"Set Authorised Number 6\",\"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\\nif (params.WhiteListNumber6.EnableDisableWhiteListNumber6 == '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.WhiteListNumber6.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.WhiteListNumber6.Number) {\\r\\n //Authorised number 8\\r\\n value += '00111'; // No SIM Dialing + Contact Number 8\\r\\n var number = params.WhiteListNumber6.Number;\\r\\n numberHex = ascii_to_hexa(number).toUpperCase();\\r\\n} else {\\r\\n value += '00111';\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.WhiteListNumber6.Name) {\\r\\n var nameContact = params.WhiteListNumber6.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Contact6').toUpperCase();\\r\\n }\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":0,\"HasAck\":true,\"HexString\":true,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908837}],"Tags":[]},{"Id":3293,"Name":"Set SOS Number","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 numberHex = '';\nvar value = '';\n// For Rio\nif (params.SOSButtonSettings.EnableDisableSOSButtonSettings == 'true') {\n value += '10'; // Enable + Not accept SMS\n} else {\n value += '00';\n} // Disable + not accept SMS\nif (params.SOSButtonSettings.Call == 'true') {\n value += '1'; // Togle Call\n} else {\n value += '0';\n} // Untogle Call\nif (params.SOSButtonSettings.Number) {\n value += '00000'; // No SIM Dialing + Contact Number 1\n var number = params.SOSButtonSettings.Number;\n numberHex = ascii_to_hexa(number).toUpperCase();\n} else {\n value += '00000';\n}\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\n// select version\nswitch (params.DeviceVersion.DeviceVersion) {\n case '1':\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\n var key = '30';\n var messageBody = command + keyLength + key + value + numberHex;\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\n break;\n case '2':\n var key = '34';\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase(); //decimalToHex(number.length); // check numberLenght Automatic 0C Spanish or 0D English number\n var keyLength = ('00' + decimalToHex(8 + (numberHex.length / 2))).slice(-2).toUpperCase();\n var messageBody = command + keyLength + key + value + numberLength + numberHex + '03534F5300'; // 03534F5300 nameLenght 03 + name 'SOS' to hex\n var totalLenght = ('0000' + decimalToHex(10 + (numberHex.length / 2))).slice(-4).toUpperCase();\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\n break;\n default:\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\n var key = '30';\n var messageBody = command + keyLength + key + value + numberHex;\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\n break;\n}\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' + 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3293,\"Name\":\"Set SOS Number\",\"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 numberHex = '';\\nvar value = '';\\n// For Rio\\nif (params.SOSButtonSettings.EnableDisableSOSButtonSettings == 'true') {\\n value += '10'; // Enable + Not accept SMS\\n} else {\\n value += '00';\\n} // Disable + not accept SMS\\nif (params.SOSButtonSettings.Call == 'true') {\\n value += '1'; // Togle Call\\n} else {\\n value += '0';\\n} // Untogle Call\\nif (params.SOSButtonSettings.Number) {\\n value += '00000'; // No SIM Dialing + Contact Number 1\\n var number = params.SOSButtonSettings.Number;\\n numberHex = ascii_to_hexa(number).toUpperCase();\\n} else {\\n value += '00000';\\n}\\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\nvar command = '02';\\n// select version\\nswitch (params.DeviceVersion.DeviceVersion) {\\n case '1':\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var key = '30';\\n var messageBody = command + keyLength + key + value + numberHex;\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n case '2':\\n var key = '34';\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase(); //decimalToHex(number.length); // check numberLenght Automatic 0C Spanish or 0D English number\\n var keyLength = ('00' + decimalToHex(8 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + '03534F5300'; // 03534F5300 nameLenght 03 + name 'SOS' to hex\\n var totalLenght = ('0000' + decimalToHex(10 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n default:\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var key = '30';\\n var messageBody = command + keyLength + key + value + numberHex;\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n}\\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' + 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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692256},{"Type":1,"NewValue":"{\"Id\":3293,\"Name\":\"Set SOS Number\",\"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 numberHex = '';\\nvar value = '';\\n// For Rio\\nif (params.SOSButtonSettings.EnableDisableSOSButtonSettings == 'true') {\\n value += '10'; // Enable + Not accept SMS\\n} else {\\n value += '00';\\n} // Disable + not accept SMS\\nif (params.SOSButtonSettings.Call == 'true') {\\n value += '1'; // Togle Call\\n} else {\\n value += '0';\\n} // Untogle Call\\nif (params.SOSButtonSettings.Number) {\\n value += '00000'; // No SIM Dialing + Contact Number 1\\n var number = params.SOSButtonSettings.Number;\\n numberHex = ascii_to_hexa(number).toUpperCase();\\n} else {\\n value += '00000';\\n}\\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\nvar command = '02';\\n// select version\\nswitch (params.DeviceVersion.DeviceVersion) {\\n case '1':\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var key = '30';\\n var messageBody = command + keyLength + key + value + numberHex;\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n case '2':\\n var key = '34';\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase(); //decimalToHex(number.length); // check numberLenght Automatic 0C Spanish or 0D English number\\n var keyLength = ('00' + decimalToHex(8 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + '03534F5300'; // 03534F5300 nameLenght 03 + name 'SOS' to hex\\n var totalLenght = ('0000' + decimalToHex(10 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n default:\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var key = '30';\\n var messageBody = command + keyLength + key + value + numberHex;\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n}\\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' + 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\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908924},{"Type":1,"NewValue":"{\"Id\":3293,\"Name\":\"Set SOS Number\",\"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 numberHex = '';\\nvar value = '';\\n// For Rio\\nif (params.SOSButtonSettings.EnableDisableSOSButtonSettings == 'true') {\\n value += '10'; // Enable + Not accept SMS\\n} else {\\n value += '00';\\n} // Disable + not accept SMS\\nif (params.SOSButtonSettings.Call == 'true') {\\n value += '1'; // Togle Call\\n} else {\\n value += '0';\\n} // Untogle Call\\nif (params.SOSButtonSettings.Number) {\\n value += '00000'; // No SIM Dialing + Contact Number 1\\n var number = params.SOSButtonSettings.Number;\\n numberHex = ascii_to_hexa(number).toUpperCase();\\n} else {\\n value += '00000';\\n}\\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\nvar command = '02';\\n// select version\\nswitch (params.DeviceVersion.DeviceVersion) {\\n case '1':\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var key = '30';\\n var messageBody = command + keyLength + key + value + numberHex;\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n case '2':\\n var key = '34';\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase(); //decimalToHex(number.length); // check numberLenght Automatic 0C Spanish or 0D English number\\n var keyLength = ('00' + decimalToHex(8 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + '03534F5300'; // 03534F5300 nameLenght 03 + name 'SOS' to hex\\n var totalLenght = ('0000' + decimalToHex(10 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n default:\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var key = '30';\\n var messageBody = command + keyLength + key + value + numberHex;\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n}\\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' + 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\":[]}","Timestamp":1695909519},{"Type":1,"NewValue":"{\"Id\":3293,\"Name\":\"Set SOS Number\",\"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 numberHex = '';\\nvar value = '';\\n// For Rio\\nif (params.SOSButtonSettings.EnableDisableSOSButtonSettings == 'true') {\\n value += '10'; // Enable + Not accept SMS\\n} else {\\n value += '00';\\n} // Disable + not accept SMS\\nif (params.SOSButtonSettings.Call == 'true') {\\n value += '1'; // Togle Call\\n} else {\\n value += '0';\\n} // Untogle Call\\nif (params.SOSButtonSettings.Number) {\\n value += '00000'; // No SIM Dialing + Contact Number 1\\n var number = params.SOSButtonSettings.Number;\\n numberHex = ascii_to_hexa(number).toUpperCase();\\n} else {\\n value += '00000';\\n}\\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\nvar command = '02';\\n// select version\\nswitch (params.DeviceVersion.DeviceVersion) {\\n case '1':\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var key = '30';\\n var messageBody = command + keyLength + key + value + numberHex;\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n case '2':\\n var key = '34';\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase(); //decimalToHex(number.length); // check numberLenght Automatic 0C Spanish or 0D English number\\n var keyLength = ('00' + decimalToHex(8 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + '03534F5300'; // 03534F5300 nameLenght 03 + name 'SOS' to hex\\n var totalLenght = ('0000' + decimalToHex(10 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n default:\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var key = '30';\\n var messageBody = command + keyLength + key + value + numberHex;\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n}\\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' + 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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695911435},{"Type":1,"NewValue":"{\"Id\":3293,\"Name\":\"Set SOS Number\",\"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 numberHex = '';\\nvar value = '';\\n// For Rio\\nif (params.SOSButtonSettings.EnableDisableSOSButtonSettings == 'true') {\\n value += '10'; // Enable + Not accept SMS\\n} else {\\n value += '00';\\n} // Disable + not accept SMS\\nif (params.SOSButtonSettings.Call == 'true') {\\n value += '1'; // Togle Call\\n} else {\\n value += '0';\\n} // Untogle Call\\nif (params.SOSButtonSettings.Number) {\\n value += '00000'; // No SIM Dialing + Contact Number 1\\n var number = params.SOSButtonSettings.Number;\\n numberHex = ascii_to_hexa(number).toUpperCase();\\n} else {\\n value += '00000';\\n}\\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\nvar command = '02';\\n// select version\\nswitch (params.DeviceVersion.DeviceVersion) {\\n case '1':\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var key = '30';\\n var messageBody = command + keyLength + key + value + numberHex;\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n case '2':\\n var key = '34';\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase(); //decimalToHex(number.length); // check numberLenght Automatic 0C Spanish or 0D English number\\n var keyLength = ('00' + decimalToHex(8 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + '03534F5300'; // 03534F5300 nameLenght 03 + name 'SOS' to hex\\n var totalLenght = ('0000' + decimalToHex(10 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n default:\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var key = '30';\\n var messageBody = command + keyLength + key + value + numberHex;\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n}\\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' + 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\":6,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695913790}],"Tags":[]},{"Id":3327,"Name":"Cycle","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3327,\"Name\":\"Cycle\",\"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\":3,\"SendAttempts\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694506673},{"Type":1,"NewValue":"{\"Id\":3327,\"Name\":\"Cycle\",\"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\":3,\"SendAttempts\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692025},{"Type":1,"NewValue":"{\"Id\":3327,\"Name\":\"Cycle\",\"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\":3,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908282},{"Type":1,"NewValue":"{\"Id\":3327,\"Name\":\"Cycle\",\"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\":3,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695910701},{"Type":1,"NewValue":"{\"Id\":3327,\"Name\":\"Cycle\",\"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\":3,\"SendAttempts\":3,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695910765},{"Type":1,"NewValue":"{\"Id\":3327,\"Name\":\"Cycle\",\"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\":3,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695910798},{"Type":1,"NewValue":"{\"Id\":3327,\"Name\":\"Cycle\",\"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\":3,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695911874}],"Tags":[{"Id":1643,"Name":"fourthCommand","BackendAction":"commandPriority","Value":"3"}]},{"Id":3291,"Name":"Power Alert","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3291,\"Name\":\"Power Alert\",\"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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692202},{"Type":1,"NewValue":"{\"Id\":3291,\"Name\":\"Power Alert\",\"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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908668},{"Type":1,"NewValue":"{\"Id\":3291,\"Name\":\"Power Alert\",\"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\":[]}","Timestamp":1696443168},{"Type":1,"NewValue":"{\"Id\":3291,\"Name\":\"Power Alert\",\"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\":6,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1719579441}],"Tags":[]},{"Id":3314,"Name":"APN","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nif (params.SetAPN.SetAPN) {\n var apnString = params.SetAPN.SetAPN.split(',');\n var apn = apnString[0];\n var apn_username = apnString[1];\n var apn_password = apnString[2];\n if (params.SMSPassword.SMSPasswordOld) {\n var data = `${params.SMSPassword.SMSPasswordOld}S1,${apn},${apn_username},${apn_password}`;\n } else {\n var data = `S1,${apn},${apn_username},${apn_password}`;\n }\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":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3314,\"Name\":\"APN\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nif (params.SetAPN.SetAPN) {\\n var apnString = params.SetAPN.SetAPN.split(',');\\n var apn = apnString[0];\\n var apn_username = apnString[1];\\n var apn_password = apnString[2];\\n if (params.SMSPassword.SMSPasswordOld) {\\n var data = `${params.SMSPassword.SMSPasswordOld}S1,${apn},${apn_username},${apn_password}`;\\n } else {\\n var data = `S1,${apn},${apn_username},${apn_password}`;\\n }\\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\":1,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694506496}],"Tags":[{"Id":1641,"Name":"secondCommand","BackendAction":"commandPriority","Value":"1"}]},{"Id":3313,"Name":"Server","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\n//var configs2 = [];\n/*if (params.SMSPassword.SMSPasswordOld) {\n var data2 = `${params.SMSPassword.SMSPasswordOld}prefix1,${serverParams.Imei}`;\n} else {\n var data2 = `prefix1,${serverParams.Imei}`;\n}\nAddValue('data', data2);*/\n//var commandConfigs2 = {\n// template: \"main\",\n// configs: configs2\n//};\n//msg.push(JSON.stringify(commandConfigs2));\nif (params.Server.SetServer) {\n var serverString = params.Server.SetServer.split(',');\n var domain = serverString[0];\n var port = serverString[1];\n if (params.SMSPassword.SMSPasswordOld) {\n var data = `${params.SMSPassword.SMSPasswordOld}IP1,${domain},${port}`;\n } else {\n var data = `IP1,${domain},${port}`;\n }\n}\nAddValue('data', data);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue2(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs2.push(cvpair);\n}\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":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3313,\"Name\":\"Server\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\n//var configs2 = [];\\n/*if (params.SMSPassword.SMSPasswordOld) {\\n var data2 = `${params.SMSPassword.SMSPasswordOld}prefix1,${serverParams.Imei}`;\\n} else {\\n var data2 = `prefix1,${serverParams.Imei}`;\\n}\\nAddValue('data', data2);*/\\n//var commandConfigs2 = {\\n// template: \\\"main\\\",\\n// configs: configs2\\n//};\\n//msg.push(JSON.stringify(commandConfigs2));\\nif (params.Server.SetServer) {\\n var serverString = params.Server.SetServer.split(',');\\n var domain = serverString[0];\\n var port = serverString[1];\\n if (params.SMSPassword.SMSPasswordOld) {\\n var data = `${params.SMSPassword.SMSPasswordOld}IP1,${domain},${port}`;\\n } else {\\n var data = `IP1,${domain},${port}`;\\n }\\n}\\nAddValue('data', data);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue2(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs2.push(cvpair);\\n}\\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\":0,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507326}],"Tags":[{"Id":1646,"Name":"firstCommand","BackendAction":"commandPriority","Value":"0"}]},{"Id":3287,"Name":"Set Authorised Number 3","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\nif (params.WhiteListNumber3.EnableDisableWhiteListNumber3 == '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.WhiteListNumber3.Call == 'true') {\r\n value += '1'; // Togle Call\r\n} else {\r\n value += '0';\r\n} // Untogle Call\r\nif (params.WhiteListNumber3.Number) {\r\n //Authorised number 5\r\n value += '00100'; // No SIM Dialing + Contact Number 5\r\n var number = params.WhiteListNumber3.Number;\r\n numberHex = ascii_to_hexa(number).toUpperCase();\r\n} else {\r\n value += '00100';\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\n// select version\r\nswitch (params.DeviceVersion.DeviceVersion) {\r\n case '1':\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n case '2':\r\n var key = '34';\r\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\r\n if (params.WhiteListNumber3.Name) {\r\n var nameContact = params.WhiteListNumber3.Name;\r\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\r\n } else {\r\n var nameHex = ascii_to_hexa('Contact3').toUpperCase();\r\n }\r\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\r\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\r\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n default:\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n}\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3287,\"Name\":\"Set Authorised Number 3\",\"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\\nif (params.WhiteListNumber3.EnableDisableWhiteListNumber3 == '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.WhiteListNumber3.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.WhiteListNumber3.Number) {\\r\\n //Authorised number 5\\r\\n value += '00100'; // No SIM Dialing + Contact Number 5\\r\\n var number = params.WhiteListNumber3.Number;\\r\\n numberHex = ascii_to_hexa(number).toUpperCase();\\r\\n} else {\\r\\n value += '00100';\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.WhiteListNumber3.Name) {\\r\\n var nameContact = params.WhiteListNumber3.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Contact3').toUpperCase();\\r\\n }\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908787}],"Tags":[]},{"Id":3284,"Name":"Speed Dial Number","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 Rio and watch\r\nif (params.SpeedDialButtonSettings.EnableDisableSpeedDial == 'true') {\r\n value += '10'; // Enable + Not accept SMS\r\n} else {\r\n value += '00'; // Disable + not accept SMS\r\n}\r\nif (params.SpeedDialButtonSettings.Call == 'true') {\r\n value += '1'; // Togle Call\r\n} else {\r\n value += '0';\r\n} // Untogle Call\r\nif (params.SpeedDialButtonSettings.Number) {\r\n value += '00001'; // No SIM Dialing + Contact Number 2\r\n var number = params.SpeedDialButtonSettings.Number;\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\n// select version\r\nswitch (params.DeviceVersion.DeviceVersion) {\r\n case '1':\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n case '2':\r\n var key = '34';\r\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\r\n if (params.SpeedDialButtonSettings.Name) {\r\n var nameContact = params.SpeedDialButtonSettings.Name;\r\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\r\n } else {\r\n var nameHex = ascii_to_hexa('Speed').toUpperCase();\r\n }\r\n //nameHex = fillHex(nameLenght / 2, nameHex); // fill with '00' to be odd\r\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\r\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\r\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n default:\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n}\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3284,\"Name\":\"Speed Dial Number\",\"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 Rio and watch\\r\\nif (params.SpeedDialButtonSettings.EnableDisableSpeedDial == 'true') {\\r\\n value += '10'; // Enable + Not accept SMS\\r\\n} else {\\r\\n value += '00'; // Disable + not accept SMS\\r\\n}\\r\\nif (params.SpeedDialButtonSettings.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.SpeedDialButtonSettings.Number) {\\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.SpeedDialButtonSettings.Number;\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.SpeedDialButtonSettings.Name) {\\r\\n var nameContact = params.SpeedDialButtonSettings.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Speed').toUpperCase();\\r\\n }\\r\\n //nameHex = fillHex(nameLenght / 2, nameHex); // fill with '00' to be odd\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694532262},{"Type":1,"NewValue":"{\"Id\":3284,\"Name\":\"Speed Dial Number\",\"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 Rio and watch\\r\\nif (params.SpeedDialButtonSettings.EnableDisableSpeedDial == 'true') {\\r\\n value += '10'; // Enable + Not accept SMS\\r\\n} else {\\r\\n value += '00'; // Disable + not accept SMS\\r\\n}\\r\\nif (params.SpeedDialButtonSettings.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.SpeedDialButtonSettings.Number) {\\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.SpeedDialButtonSettings.Number;\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.SpeedDialButtonSettings.Name) {\\r\\n var nameContact = params.SpeedDialButtonSettings.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Speed').toUpperCase();\\r\\n }\\r\\n //nameHex = fillHex(nameLenght / 2, nameHex); // fill with '00' to be odd\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695909094},{"Type":1,"NewValue":"{\"Id\":3284,\"Name\":\"Speed Dial Number\",\"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 Rio and watch\\r\\nif (params.SpeedDialButtonSettings.EnableDisableSpeedDial == 'true') {\\r\\n value += '10'; // Enable + Not accept SMS\\r\\n} else {\\r\\n value += '00'; // Disable + not accept SMS\\r\\n}\\r\\nif (params.SpeedDialButtonSettings.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.SpeedDialButtonSettings.Number) {\\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.SpeedDialButtonSettings.Number;\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.SpeedDialButtonSettings.Name) {\\r\\n var nameContact = params.SpeedDialButtonSettings.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Speed').toUpperCase();\\r\\n }\\r\\n //nameHex = fillHex(nameLenght / 2, nameHex); // fill with '00' to be odd\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695936022},{"Type":1,"NewValue":"{\"Id\":3284,\"Name\":\"Speed Dial Number\",\"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 Rio and watch\\r\\nif (params.SpeedDialButtonSettings.EnableDisableSpeedDial == 'true') {\\r\\n value += '10'; // Enable + Not accept SMS\\r\\n} else {\\r\\n value += '00'; // Disable + not accept SMS\\r\\n}\\r\\nif (params.SpeedDialButtonSettings.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.SpeedDialButtonSettings.Number) {\\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.SpeedDialButtonSettings.Number;\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.SpeedDialButtonSettings.Name) {\\r\\n var nameContact = params.SpeedDialButtonSettings.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Speed').toUpperCase();\\r\\n }\\r\\n //nameHex = fillHex(nameLenght / 2, nameHex); // fill with '00' to be odd\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":[]}","Timestamp":1696443499}],"Tags":[]},{"Id":3498,"Name":"Heart Rate Detecting Interval","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';\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\nif (params.DeviceVersion.DeviceVersion == '1') {\n command = '02';\n keyLength = '02';\n key = '11';\n heartBeat = '05';\n totalLenght = '0400';\n}\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":25,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":3498,\"Name\":\"Heart Rate Detecting Interval\",\"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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '05';\\n totalLenght = '0400';\\n}\\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\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507189},{"Type":1,"NewValue":"{\"Id\":3498,\"Name\":\"Heart Rate Detecting Interval\",\"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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '05';\\n totalLenght = '0400';\\n}\\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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692140},{"Type":1,"NewValue":"{\"Id\":3498,\"Name\":\"Heart Rate Detecting Interval\",\"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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '10';\\n totalLenght = '0400';\\n}\\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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694765236},{"Type":1,"NewValue":"{\"Id\":3498,\"Name\":\"Heart Rate Detecting Interval\",\"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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '10';\\n totalLenght = '0400';\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908488},{"Type":1,"NewValue":"{\"Id\":3498,\"Name\":\"Heart Rate Detecting Interval\",\"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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '10';\\n totalLenght = '0400';\\n}\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695937689},{"Type":1,"NewValue":"{\"Id\":3498,\"Name\":\"Heart Rate Detecting Interval\",\"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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '10';\\n totalLenght = '0400';\\n}\\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\":[]}","Timestamp":1695938172},{"Type":1,"NewValue":"{\"Id\":3498,\"Name\":\"Heart Rate Detecting Interval\",\"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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '0A';\\n totalLenght = '0400';\\n}\\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\":[]}","Timestamp":1707985360},{"Type":1,"NewValue":"{\"Id\":3498,\"Name\":\"Heart Rate Detecting Interval\",\"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 = [];\\n//default\\nvar heartBeat = '58 02 00 00'\\nif (params.HeartRateMonitor.HeartRateDetectingInterval) {\\n 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 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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '0A';\\n totalLenght = '0400';\\n}\\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\":[]}","Timestamp":1707986571},{"Type":1,"NewValue":"{\"Id\":3498,\"Name\":\"Heart Rate Detecting Interval\",\"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 msg = [];\\nvar configs = [];\\nvar configsSMS = [];\\n// local test\\n//var params = {HeartRateMonitor:{'HeartRateDetectingInterval':'','EnableDisableHeartRateMonitor':'false'}, DeviceVersion:{'DeviceVersion':2}}\\n//default\\nvar heartBeat = '58020000';\\nif (params.HeartRateMonitor.HeartRateDetectingInterval) {\\n 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 heartBeat = '58020000';\\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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '0A';\\n totalLenght = '0400';\\n}\\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\":[]}","Timestamp":1707987345}],"Tags":[]},{"Id":3499,"Name":"Step Collect Settings","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 totalLenght = '0700';\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\nif (params.DeviceVersion.DeviceVersion == '1') {\n command = '02';\n keyLength = '02';\n key = '11';\n heartBeat = '05';\n totalLenght = '0400';\n}\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":25,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '05';\\n totalLenght = '0400';\\n}\\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\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507472},{"Type":1,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '05';\\n totalLenght = '0400';\\n}\\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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692405},{"Type":1,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '10';\\n totalLenght = '0400';\\n}\\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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694765286},{"Type":1,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '10';\\n totalLenght = '0400';\\n}\\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\":3,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695909108},{"Type":1,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '10';\\n totalLenght = '0400';\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695909133},{"Type":1,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '10';\\n totalLenght = '0400';\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695909154},{"Type":1,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '10';\\n totalLenght = '0400';\\n}\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695937625},{"Type":1,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '10';\\n totalLenght = '0400';\\n}\\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\":[]}","Timestamp":1695938206},{"Type":1,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '0A';\\n totalLenght = '0400';\\n}\\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\":[]}","Timestamp":1707985331},{"Type":1,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 = [];\\n// default value\\nvar heartBeat = '58 02 00 00';\\nif (params.StepCounting.StepCountingInterval) {\\n 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 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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '0A';\\n totalLenght = '0400';\\n}\\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\":[]}","Timestamp":1707986618},{"Type":1,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 msg = [];\\nvar configs = [];\\nvar configsSMS = [];\\n// default value\\nvar heartBeat = '58020000';\\nif (params.StepCounting.StepCountingInterval) {\\n 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 heartBeat = '58020000';\\n} // disable and 600 seconds\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\nvar command = '02';\\nvar keyLength = '05';\\nvar key = '5B';\\nvar totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '0A';\\n totalLenght = '0400';\\n}\\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\":[]}","Timestamp":1707987941}],"Tags":[]},{"Id":3805,"Name":"Set WiFi Connect","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 msg = [];\r\nvar configs = [];\r\n//var 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.WiFiConnect.EnableDisableWiFiConnect == 'true') {\r\n if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase();\r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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":6,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":3805,\"Name\":\"Set WiFi Connect\",\"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 msg = [];\\r\\nvar configs = [];\\r\\n//var 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.WiFiConnect.EnableDisableWiFiConnect == 'true') {\\r\\n if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase();\\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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\":6,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706037441},{"Type":1,"NewValue":"{\"Id\":3805,\"Name\":\"Set WiFi Connect\",\"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 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.WiFiConnect.EnableDisableWiFiConnect == 'true') {\\r\\n if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase();\\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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\":6,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706344820}],"Tags":[]},{"Id":3960,"Name":"Set Watch Settings","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 Watch Settings' Only enable y disable:\r\n// params.StepCounting.EnableDisableStepCounting == 'true'\r\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\r\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\r\n// Test enabled both\r\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\r\n// test step on HRT off\r\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test step off HRT on\r\n// 02 11 36 00 00 12 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test both off \r\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) \r\nvar messageBody = '0211360000';\r\n// Watch setting related to Step and heart rate settings\r\nvar dataSMS = '';\r\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1A00003E00000014000000000000';\r\n /* if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0A00003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1200003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0200003800000014000000000000';\r\n} else {\r\n messageBody += '0200003800000014000000000000';\r\n}\r\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\r\nif (params.DeviceVersion.DeviceVersion == '1') {\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n heartBeat = '0A';\r\n totalLenght = '0400';\r\n messageBody = command + keyLength + key + heartBeat;\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":4,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":3960,\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 00 12 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) \\r\\nvar messageBody = '0211360000';\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707985821},{"Type":1,"NewValue":"{\"Id\":3960,\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 1200003A00000014000000000000\\r\\n// test both off \\r\\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) \\r\\nvar messageBody = '0211360000';\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003A00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1708002138},{"Type":1,"NewValue":"{\"Id\":3960,\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) \\r\\nvar messageBody = '0211360008'; // step count/heart value display\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003A00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1708011331},{"Type":1,"NewValue":"{\"Id\":3960,\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) \\r\\nvar messageBody = '021136'; // step count/heart value display\\r\\n// Watch setting related FACE ID\\r\\nif (params.HeartRateMonitor.HeartRateWatchFace == 'true') {\\r\\n messageBody += '0108'; // Face ID 1 \\r\\n} else if (params.StepCounting.StepCountingWatchFace == 'true') {\\r\\n messageBody += '0208'; // Face ID 2\\r\\n} else {\\r\\n messageBody += '0008';\\r\\n} // Default Face ID 0\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003A00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709752193},{"Type":1,"NewValue":"{\"Id\":3960,\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) , lenght and key\\r\\nvar messageBody = '021136';\\r\\n// step count/heart value display\\r\\n// Watch setting related FACE ID\\r\\nswitch (params.HeartRateMonitor.WatchFace) {\\r\\n case x:\\r\\n // code block\\r\\n break;\\r\\n case y:\\r\\n // code block\\r\\n break;\\r\\n default:\\r\\n // code block\\r\\n}\\r\\nif (params.HeartRateMonitor.HeartRateWatchFace == 'true') {\\r\\n messageBody += '0108'; // Face ID 1 \\r\\n} else if (params.StepCounting.StepCountingWatchFace == 'true') {\\r\\n messageBody += '0208'; // Face ID 2\\r\\n} else {\\r\\n messageBody += '0008';\\r\\n} // Default Face ID 0\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003A00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709835912},{"Type":1,"NewValue":"{\"Id\":3960,\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) , lenght and key\\r\\nvar messageBody = '021136';\\r\\n// step count/heart value display\\r\\n// Watch setting related FACE ID\\r\\nif (params.WatchFace.SetWatchFace) {\\r\\n messageBody += params.WatchFace.SetWatchFace; // Face ID \\r\\n} else {\\r\\n messageBody += '00'; // Analog Face Default FACE ID 0 \\r\\n}\\r\\n/*\\r\\nif (params.HeartRateMonitor.HeartRateWatchFace == 'true') {\\r\\n messageBody += '0108'; // Face ID 1 \\r\\n} else if (params.StepCounting.StepCountingWatchFace == 'true') {\\r\\n messageBody += '0208'; // Face ID 2\\r\\n} else {\\r\\n messageBody += '0008';\\r\\n} // Default Face ID 0\\r\\n*/\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '1200003A00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709837334},{"Type":1,"NewValue":"{\"Id\":3960,\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) , lenght and key\\r\\nvar messageBody = '021136';\\r\\n// step count/heart value display\\r\\n// Watch setting related FACE ID\\r\\nif (params.WatchFace.SetWatchFace) {\\r\\n messageBody += params.WatchFace.SetWatchFace; // Face ID \\r\\n} else {\\r\\n messageBody += '00'; // Analog Face Default FACE ID 0 \\r\\n}\\r\\n/*\\r\\nif (params.HeartRateMonitor.HeartRateWatchFace == 'true') {\\r\\n messageBody += '0108'; // Face ID 1 \\r\\n} else if (params.StepCounting.StepCountingWatchFace == 'true') {\\r\\n messageBody += '0208'; // Face ID 2\\r\\n} else {\\r\\n messageBody += '0008';\\r\\n} // Default Face ID 0\\r\\n*/\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '081A00003E00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '080A00003C00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '081200003A00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '080200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '080200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709838700},{"Type":1,"NewValue":"{\"Id\":3960,\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) , lenght and key\\r\\nvar messageBody = '021136';\\r\\n// step count/heart value display\\r\\n// Watch setting related FACE ID\\r\\nif (params.WatchFace.SetWatchFace) {\\r\\n messageBody += params.WatchFace.SetWatchFace; // Face ID \\r\\n} else {\\r\\n messageBody += '00'; // Analog Face Default FACE ID 0 \\r\\n}\\r\\n// Watch Display setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '081A0000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '080A0000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '08120000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '08020000';\\r\\n} else {\\r\\n messageBody += '08020000';\\r\\n}\\r\\n//menu items\\r\\nif ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '06000000'; //menu 1 and 2\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '04000000'; //menu 2\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '02000000'; //menu 1\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '00000000'; // no menu\\r\\n} else {\\r\\n messageBody += '00000000'; // no menu\\r\\n}\\r\\n// from autohome page to the end\\r\\nmessageBody += '14000000000000';\\r\\n/* OLD Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '081A00003E00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '080A00003C00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '081200003A00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '080200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '080200003800000014000000000000';\\r\\n} */\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710174590}],"Tags":[]},{"Id":3963,"Name":"Control Configuration Mode","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`;\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":0,"NewValue":"{\"Id\":3963,\"Name\":\"Control Configuration Mode\",\"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`;\\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":1708015260}],"Tags":[]},{"Id":5009,"Name":"TriggerOTA","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// Trigger OTA\r\nvar 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 value for URL\r\nvar value = 'http://35.180.127.121:5800/fi_ota';\r\nvar value = ascii_to_hexa(value).toUpperCase();\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\n// control command\r\nvar command = '04';\r\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\r\nvar key = '30';\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLenght = changeEndianness(totalLenght);\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":[{"Type":0,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\nvar value = 'http://35.180.127.121:5800/fi_ota';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1717658804},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\nvar value = 'http://portal.airtrace.io:1880/fi_ota';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1717944509},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota';\\r\\nvar value = 'http://portal.airtrace.io:1880/fi_ota/download/l8a_1g_gmo_V04b.8601.2312.B4411.1694569439_V04b.8601.2313.B4411.1702355317_package.zip';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1718181373},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota';\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota/download/l8a_1g_gmo_V04b.8601.2312.B4411.1694569439_V04b.8601.2313.B4411.1702355317_package.zip';\\r\\nvar value = 'http://portal.airtrace.io:1880/fi_ota/download/file';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1718263988},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\nvar value = 'http://portal.airtrace.io:1880/fi_ota';\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota/download/l8a_1g_gmo_V04b.8601.2312.B4411.1694569439_V04b.8601.2313.B4411.1702355317_package.zip';\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota/download/file';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1718267063},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota';\\r\\nvar value = 'http://portal.airtrace.io:1880/fi_ota/download/l8a_1g_gmo_V04b.8601.2312.B4411.1694569439_V04b.8601.2313.B4411.1702355317_package.zip';\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota/download/file';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1718307242},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota';\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota/download/l8a_1g_gmo_V04b.8601.2312.B4411.1694569439_V04b.8601.2313.B4411.1702355317_package.zip';\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota/download/file';\\r\\nvar value = 'https://test.myoysta.com/iOTA/V04.1.0.15.4411.2403.zip';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1718608642},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota';\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota/download/l8a_1g_gmo_V04b.8601.2312.B4411.1694569439_V04b.8601.2313.B4411.1702355317_package.zip';\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota/download/file';\\r\\nvar value = 'https://test.myoysta.com/iOTA/l8a_1g_gmo_V04b.8601.2312.B4411.1694569439_V04b.8601.2313.B4411.1702355317_package.zip';\\r\\n//var value = 'https://test.myoysta.com/iOTA/V04.1.0.15.4411.2403.zip';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1718636161},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota';\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota/download/l8a_1g_gmo_V04b.8601.2312.B4411.1694569439_V04b.8601.2313.B4411.1702355317_package.zip';\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota/download/file';\\r\\n//var value = 'https://test.myoysta.com/iOTA/l8a_1g_gmo_V04b.8601.2312.B4411.1694569439_V04b.8601.2313.B4411.1702355317_package.zip';\\r\\n//var value = 'https://test.myoysta.com/iOTA/V04.1.0.15.4411.2403.zip';\\r\\nvar value = 'https://test.myoysta.com/iOTA/fi_ota/l8a_1g_gmo_V04b.8601.2312.B4411.1694569439_V04b.8601.2313.B4411.1702355317_package.zip';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1718812460},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\nvar value = 'http://portal.airtrace.io:1880/fi_ota';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1719421864},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL 40.91.195.192:8098\\r\\nvar value = 'http://40.91.195.192:8098/fi_ota';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1722507053},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL 40.91.195.192:8098\\r\\nvar value = 'http://40.91.195.192:8098/api/fi_ota';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1722591687},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL 40.91.195.192:8098\\r\\n// http://fota.loctube.com:10007/fi_ota (Eview server)\\r\\n// http://40.91.195.192:8098/api/fi_ota (our server)\\r\\nvar value = 'http://fota.loctube.com:10007/fi_ota';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1724928711},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL 40.91.195.192:8098\\r\\n// http://fota.loctube.com:10007/fi_ota (Eview server)\\r\\n// http://40.91.195.192:8098/api/fi_ota (our server)\\r\\nvar value = 'http://40.91.195.192:8098/api/fi_ota';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1725362551},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL 40.91.195.192:8098\\r\\n// http://fota.loctube.com:10007/fi_ota (Eview server)\\r\\n// http://40.91.195.192:8098/api/fi_ota (test server)\\r\\n// production server 'http://13.81.174.129:8098/api/fi_ota';\\r\\nif (params.Server.SetServer === '52.232.85.255,5678') {\\r\\n var value = 'http://13.81.174.129:8098/api/fi_ota'; // production OTA server\\r\\n} else {\\r\\n var value = 'http://40.91.195.192:8098/api/fi_ota'; // test OTA server\\r\\n}\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1736338588}],"Tags":[]},{"Id":5810,"Name":"getCustomId","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// getCustomId\r\n// ConvertDevice.CurrentProfile\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 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\n//var 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\n//AddValueSMS('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":[{"Type":0,"NewValue":"{\"Id\":5810,\"Name\":\"getCustomId\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// getCustomId\\r\\n// ConvertDevice.CurrentProfile\\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 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\\n//var 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\\n//AddValueSMS('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\":[]}","Timestamp":1753800680}],"Tags":[]},{"Id":5811,"Name":"setCustomId","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// setCustomId\r\n// ConvertDevice.Profile\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 configs = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar key = '47';\r\nif (params.ConvertDevice.Profile == 'Rio') {\r\n var keyLength = '02';\r\n var customID = '04';\r\n var totalLenght = '0400';\r\n} else if (params.ConvertDevice.Profile == 'Roam') {\r\n var keyLength = '02';\r\n var customID = '64';\r\n var totalLenght = '0400';\r\n} else {\r\n var keyLength = '01';\r\n var customID = '';\r\n var totalLenght = '0300';\r\n}\r\nvar messageBody = command + keyLength + key + customID;\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' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\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":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":5811,\"Name\":\"setCustomId\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// setCustomId\\r\\n// ConvertDevice.Profile\\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 configs = [];\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar key = '47';\\r\\nif (params.ConvertDevice.Profile == 'Rio') {\\r\\n var keyLength = '02';\\r\\n var customID = '04';\\r\\n var totalLenght = '0400';\\r\\n} else if (params.ConvertDevice.Profile == 'Roam') {\\r\\n var keyLength = '02';\\r\\n var customID = '64';\\r\\n var totalLenght = '0400';\\r\\n} else {\\r\\n var keyLength = '01';\\r\\n var customID = '';\\r\\n var totalLenght = '0300';\\r\\n}\\r\\nvar messageBody = command + keyLength + key + customID;\\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' + totalLenght + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\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\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1753801032},{"Type":1,"NewValue":"{\"Id\":5811,\"Name\":\"setCustomId\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// setCustomId\\r\\n// ConvertDevice.Profile\\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 configs = [];\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar key = '47';\\r\\nif (params.ConvertDevice.Profile == '04') { //Rio\\r\\n var keyLength = '02';\\r\\n var customID = '04';\\r\\n var totalLenght = '0400';\\r\\n} else if (params.ConvertDevice.Profile == '64') { // Roam\\r\\n var keyLength = '02';\\r\\n var customID = '64';\\r\\n var totalLenght = '0400';\\r\\n} else {\\r\\n var keyLength = '01';\\r\\n var customID = '';\\r\\n var totalLenght = '0300';\\r\\n}\\r\\nvar messageBody = command + keyLength + key + customID;\\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' + totalLenght + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\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\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1753801712}],"Tags":[]}],"Operations":[{"Id":215,"Name":"Eview","Operation":"if (typeof localTesting === \"undefined\") {\r\n var localTesting = \"False\";\r\n}\r\nconst 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\nvar codeValues = [];\r\nAddValue(codeValues, 'protocol_template', 'Rio');\r\nAddValue(codeValues, 'product', serverParams.ProductName);\r\nvar configsToAck = [];\r\nif (globalTemplate == \"True\") {\r\n if (raw.startsWith('esendex')) {\r\n //general SMS message\r\n }\r\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\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 var message = rawFromBytes;\r\n var properties = message.substring(2, 4);\r\n //need to decrypt properties\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 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 //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 // 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 if (serverParams.Imei === undefined) {\r\n sendMessageToLocalhostNoWait(\"RIO-ASSOCIATE;\" + imei + \";\" + serverParams.Guid + \";\");\r\n }\r\n break;\r\n //Alarm code\r\n case '02':\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 //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 var alarm = 'Geo1';\r\n } else if ((alarmCodeInt & 32) == 32) {\r\n var alarm = 'Geo2';\r\n } else if ((alarmCodeInt & 64) == 64) {\r\n var alarm = 'Geo3';\r\n } else if ((alarmCodeInt & 128) == 128) {\r\n var alarm = 'Geo4';\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 var customID = hex_to_ascii(value);\r\n general += 'customID:' + customID + ',';\r\n break;\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 (alarmCode) {\r\n messageForReceiver = (`Eview-${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 = (`Eview-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};GENERAL=${general}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n }\r\n //else {\r\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \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) {\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 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 var cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\r\n var 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 = (`Eview-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 //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. Seems a pedometer, do I need it?\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 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 }\r\n //var alarmCode = 'True';\r\n var alarm = 'HRT';\r\n general += ' heart rate:' + heartRate + ',';\r\n //messageForReceiver = (`Eview-${alarm};${imei};GENERAL=${general};${info};HRT=${info}`);\r\n //sendMessageToLocalhostNoWait(messageForReceiver);\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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\r\n // \"Eview-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 = (`Eview-${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 = (`Eview-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};GENERAL=${general}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n } else if (alarm === 'HRT') {\r\n messageForReceiver = (`Eview-${alarm};${imei};GENERAL=${general};${info};HRT=${info}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n } else {\r\n messageForReceiver = (`Eview-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};GENERAL=${general}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n }\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 var fwVersion = hex_to_ascii(value);\r\n messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n //IMEI\r\n case '03':\r\n var imei = hexToDecimal(value);\r\n sendMessageToLocalhostNoWait(\"RIO-ASSOCIATE;\" + imei + \";\" + serverParams.Guid + \";\");\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 //GSM Module\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 }\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 switch (key) {\r\n case '01': // Device ID\r\n var imei = hex_to_ascii(value);\r\n sendMessageToLocalhostNoWait(\"RIO-ASSOCIATE;\" + imei + \";\" + serverParams.Guid + \";\");\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 var cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\r\n // debug(cellNetworkSignal)\r\n var 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 workMode += 'workMode:' + workMode + ';';\r\n }\r\n }\r\n }\r\n // revisar\r\n var gen_location = '0';\r\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\r\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\r\n // Todo ... respond to device\r\n //messageForReceiver = `Eview;${imei};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 if (alarmCode) {\r\n messageForReceiver = (`Eview-${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 = (`Eview-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};GENERAL=${general}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n } else {\r\n messageForReceiver = (`Eview-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};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 = (`Eview-ACK;${imei};${rawFromBytes}`); // ${sequenceID}; add ${sequenceID}; 19-07\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n var value = message.substring(index, index = index + keyLength - 2);\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} else if (oystaTemplate == 'True') { // Oysta Template \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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\r\n if (params.data.startsWith('Device location request')) {\r\n configsToAck.push(configIds.RequestLocation.RequestLocation);\r\n } else if (params.data.startsWith('Set IP ok')) {\r\n configsToAck.push(configIds.Server.SetServer);\r\n } else if (params.data.startsWith('Set APN ok')) {\r\n configsToAck.push(configIds.SetAPN.SetAPN);\r\n } else if (params.data.startsWith('Set Rio-')) {\r\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\r\n } else if (params.data.startsWith('loc')) {\r\n configsToAck.push(configIds.RequestLocation.RequestLocation);\r\n } else if (params.data.startsWith('Now:')) {\r\n configsToAck.push(configIds.RequestLocation.RequestLocation);\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\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 back to receiver via console.log\r\nif (configsToAck.length > 0) {\r\n var dataToReceiver = {\r\n 'values': codeValues,\r\n 'configsToAck': configsToAck,\r\n };\r\n} else {\r\n var dataToReceiver = {\r\n 'values': codeValues\r\n };\r\n}\r\nconsole.log(dataToReceiver);\r\n// end of main operation\r\n// define functions used in operation\r\nfunction 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\nfunction 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\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 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\nfunction hex2bin(hex) { //\r\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\r\n}\r\n\r\nfunction 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\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 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\nfunction decimalToHex(x) { // decimal to hex\r\n x = x.toString(16).toUpperCase();\r\n return x;\r\n}\r\n\r\nfunction 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\nfunction 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\nfunction hexToDecimal(x) {\r\n x = parseInt(x, 16);\r\n return x;\r\n}\r\n\r\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\r\n var server;\r\n if (localTesting === \"True\") {\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}","Type":0,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\n var localTesting = \\\"False\\\";\\n}\\nconst 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];\\nvar codeValues = [];\\nAddValue(codeValues, 'protocol_template', 'Rio');\\nAddValue(codeValues, 'product', serverParams.ProductName);\\nvar configsToAck = [];\\nif (globalTemplate == \\\"True\\\") {\\n if (raw.startsWith('esendex')) {\\n //general SMS message\\n }\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\n var properties = message.substring(2, 4);\\n //need to decrypt properties\\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 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 // 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 = hex_to_ascii(value);\\n if (serverParams.Imei === undefined) {\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n }\\n break;\\n //Alarm code\\n case '02':\\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 //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 var alarm = 'Geo1';\\n } else if ((alarmCodeInt & 32) == 32) {\\n var alarm = 'Geo2';\\n } else if ((alarmCodeInt & 64) == 64) {\\n var alarm = 'Geo3';\\n } else if ((alarmCodeInt & 128) == 128) {\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\n general += 'customID:' + customID + ',';\\n break;\\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 = hex_to_ascii(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 (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n status_data = statusDevice; //to oysta template\\n statusHex = (statusHex);\\n statusHex = hex2bin(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 = (`Eview-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 = hex_to_ascii(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 = hex_to_ascii(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 //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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info}`);\\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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel}`);\\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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\n // \\\"Eview-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 if (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 if (alarm === 'HRT') {\\n messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (alarm === 'STP') {\\n messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`Eview-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 }\\n if (command == '02') {\\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 var fwVersion = hex_to_ascii(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //IMEI\\n case '03':\\n var imei = hexToDecimal(value);\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 //GSM Module\\n case '1B':\\n //Decimal o ascii?\\n var gsmModule = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\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 switch (key) {\\n case '01': // Device ID\\n var imei = hex_to_ascii(value);\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n break;\\n case '10': // Heartbeat\\n var heartbeat = hex_to_ascii(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 = hex2bin(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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\n // Todo ... respond to device\\n //messageForReceiver = `Eview;${imei};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 = hex_to_ascii(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 if (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-ACK;${imei};${rawFromBytes}`); // ${sequenceID}; add ${sequenceID}; 19-07\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var value = message.substring(index, index = index + keyLength - 2);\\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 = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\n AddValue(codeValues, \\\"imei\\\", imei);\\n }\\n }\\n} else if (oystaTemplate == 'True') { // Oysta Template \\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\n if (params.data.startsWith('Device location request')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Server.SetServer);\\n } else if (params.data.startsWith('Set APN ok')) {\\n configsToAck.push(configIds.SetAPN.SetAPN);\\n } else if (params.data.startsWith('Set Rio-')) {\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\n } else if (params.data.startsWith('loc')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\n } else if (params.data.startsWith('reboot ok')) {\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\n } else if (params.data.startsWith('Now:')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\nif (configsToAck.length > 0) {\\n var dataToReceiver = {\\n 'values': codeValues,\\n 'configsToAck': configsToAck,\\n };\\n} else {\\n var dataToReceiver = {\\n 'values': codeValues\\n };\\n}\\nconsole.log(dataToReceiver);\\n// end of main operation\\n// define functions used in operation\\nfunction 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\\nfunction ascii_to_hexa(str) { // ascii to hex \\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 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 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}\\n\\nfunction hex2bin(hex) { //\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\n}\\n\\nfunction calculateCheckSum(payloadData) { // check if payload checksum is valid\\n var checksum = byteStringToByteArray(payloadData);\\n checksum = crc16byte(checksum);\\n checksum = decimalToHex(checksum);\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\n return changeEndianness(checksum);\\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 debug(str) { // write debug info to console log, if localTesting\\n if (localTesting === \\\"True\\\") {\\n console.log(str);\\n }\\n}\\n\\nfunction decimalToHex(x) { // decimal to hex\\n x = x.toString(16).toUpperCase();\\n return x;\\n}\\n\\nfunction hex_to_ascii(str1) { // Hex to Ascii \\n var hex = str1.toString();\\n var str = '';\\n for (var n = 0; n < hex.length; n += 2) {\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\n }\\n return str;\\n}\\n\\nfunction hexToDecimalSigned(hex) { // hex to decimal\\n if (hex.length % 2 != 0) {\\n hex = \\\"0\\\" + hex;\\n }\\n var num = parseInt(hex, 16);\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\n if (num > maxVal / 2 - 1) {\\n num = num - maxVal;\\n }\\n return num;\\n}\\n\\nfunction hexToDecimal(x) {\\n x = parseInt(x, 16);\\n return x;\\n}\\n\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n if (localTesting === \\\"True\\\") {\\n console.log('local testing - sending to acceptance server the message ... ');\\n console.log(str);\\n server = '52.174.17.77';\\n } else {\\n server = '127.0.0.1';\\n }\\n var c = net.createConnection(5678, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5678, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1694412468},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 // 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 if (serverParams.Imei === undefined) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\r\\n break;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 //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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info}`);\\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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel}`);\\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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 if (alarm === 'HRT') {\\r\\n messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 }\\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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\r\\n // Todo ... respond to device\\r\\n //messageForReceiver = `Eview;${imei};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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-ACK;${imei};${rawFromBytes}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\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} else if (oystaTemplate == 'True') { // Oysta Template \\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1694508502},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 // 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 if (serverParams.Imei === undefined) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\r\\n break;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 //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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info}`);\\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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel}`);\\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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 if (alarm === 'HRT') {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 }\\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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\r\\n // Todo ... respond to device\\r\\n //messageForReceiver = `Eview;${imei};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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-ACK;${imei};${rawFromBytes}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\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} else if (oystaTemplate == 'True') { // Oysta Template \\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1694533336},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 // 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 if (serverParams.Imei === undefined) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\r\\n break;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 //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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info}`);\\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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel}`);\\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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 if (alarm === 'HRT') {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\r\\n // Todo ... respond to device\\r\\n //messageForReceiver = `Eview;${imei};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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-ACK;${imei};${rawFromBytes}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\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} else if (oystaTemplate == 'True') { // Oysta Template \\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1694599053},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 // 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 //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 // 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 if (serverParams.Imei === undefined) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\r\\n break;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 //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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info}`);\\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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel}`);\\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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 if (alarm === 'HRT') {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\r\\n // Todo ... respond to device\\r\\n //messageForReceiver = `Eview;${imei};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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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 } // if multiACK\\r\\n } // For multiACK\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template \\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1695751192},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 // 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\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 // 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 if (serverParams.Imei === undefined) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\r\\n break;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 //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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info}`);\\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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel}`);\\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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 if (alarm === 'HRT') {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\r\\n // Todo ... respond to device\\r\\n //messageForReceiver = `Eview;${imei};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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1696354222},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\r\\n break;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 //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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info}`);\\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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel}`);\\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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 if (alarm === 'HRT') {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\r\\n // Todo ... respond to device\\r\\n //messageForReceiver = `Eview;${imei};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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1696370464},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\r\\n break;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info}`);\\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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel}`);\\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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 if (alarm === 'HRT') {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\r\\n // Todo ... respond to device\\r\\n //messageForReceiver = `Eview;${imei};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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1696787161},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\r\\n break;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\r\\n // Todo ... respond to device\\r\\n //messageForReceiver = `Eview;${imei};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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1696862342},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\r\\n break;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1706346502},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\r\\n break;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 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(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1708082493},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value != '30 36') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 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(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1713258924},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '30 36') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 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(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1713259440},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE-1;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '30 36') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE-2;\\\" + 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 //GSM Module\\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 }\\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 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(\\\"RIO-ASSOCIATE-3;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716198405},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '30 36') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n return; // REMOVE\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716199005},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '30 36') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n return;\\r\\n }\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716200101},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' && value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n return;\\r\\n }\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716203803},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n return;\\r\\n }\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716204442},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716204852},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716211427},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";-1\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";-2\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";-3\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716211770},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";-1\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";-2\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";-3\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716212316},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";-1\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";-2\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n AddValue(codeValues, \\\"customID--\\\", value);\\r\\n if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";-3\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716213190},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n AddValue(codeValues, \\\"customID--\\\", value);\\r\\n if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716219144},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n AddValue(codeValues, \\\"customID--\\\", value);\\r\\n if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1718361570},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n AddValue(codeValues, \\\"customID--\\\", value);\\r\\n if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1718362324},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.Current Firmware Version, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n AddValue(codeValues, \\\"customID--\\\", value);\\r\\n if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1718364470},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n AddValue(codeValues, \\\"customID--\\\", value);\\r\\n if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1718562258},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = '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, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n AddValue(codeValues, \\\"customID--\\\", value);\\r\\n if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1718818383},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n AddValue(codeValues, \\\"customID--\\\", value);\\r\\n if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1718819021},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n AddValue(codeValues, \\\"customID--\\\", value);\\r\\n if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1724070635},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1724242228},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05' || value == '12') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1733497295},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05' || value == '12' || value == '06') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1733502018},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05' || value == '12' || value == '06' || value == '07') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1733860473},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05' || value == '12' || value == '06' || value == '07' || value == '64') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742057726},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 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 //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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742496032},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742499686},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1744114071},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1744114164},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n //if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1744114758},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n //if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1744114903},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n //if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1744278293},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n //if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1744367218},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n //if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1749056964},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n //if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1749108515},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // ADD THE OPS CODE HERE\\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', 'Rio');\\n AddValue(codeValues, 'product', serverParams.ProductName);\\n var configsToAck = [];\\n var configsToUpdate = [];\\n var configsToSend = [];\\n if (globalTemplate == \\\"True\\\") {\\n if (raw.startsWith('esendex')) {\\n //general SMS message\\n }\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\n var properties = message.substring(2, 4);\\n //need to decrypt properties\\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 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 if (params.imei) {\\n AddValue(codeValues, 'imei', params.imei);\\n };\\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\n if (params.data.startsWith('Device location request')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Server.SetServer);\\n } else if (params.data.startsWith('IMEI:')) {\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n } else if (params.data.startsWith('Set APN ok')) {\\n configsToAck.push(configIds.SetAPN.SetAPN);\\n } else if (params.data.startsWith('Set Rio-')) {\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\n } else if (params.data.startsWith('loc')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\n } else if (params.data.startsWith('reboot ok')) {\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\n } else if (params.data.startsWith('Now:')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\n /*var 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 console.log(dataToReceiver);*/\\n const dtr = sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n // end of main operation\\n // define functions used in operation\\n function sendDataToReceiver(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 console.log(dataToReceiver);\\n return dataToReceiver;\\n }\\n // modify to return the object that contains your data\\n return dtr;\\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\\n function decoder(str) { // decode rawdata\\n // Rio Decoder\\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 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 = hex_to_ascii(value);\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n break;\\n //Alarm code\\n case '02':\\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 //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 var alarm = 'Geo1';\\n } else if ((alarmCodeInt & 32) == 32) {\\n var alarm = 'Geo2';\\n } else if ((alarmCodeInt & 64) == 64) {\\n var alarm = 'Geo3';\\n } else if ((alarmCodeInt & 128) == 128) {\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n return;\\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 = hex_to_ascii(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 (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n status_data = statusDevice; //to oysta template\\n statusHex = (statusHex);\\n statusHex = hex2bin(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 = (`Eview-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 = hex_to_ascii(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 = hex_to_ascii(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 = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\n //descr = hex_to_ascii(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 = hex_to_ascii(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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\n // \\\"Eview-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 if (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`Eview-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 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 = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n case '1A':\\n //no ACK need\\n var fwVersionL = hex_to_ascii(value);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n //IMEI\\n case '03':\\n var imei = hexToDecimal(value);\\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 //GSM Module\\n case '1B':\\n //Decimal o ascii?\\n var gsmModule = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\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 switch (key) {\\n case '01': // Device ID\\n var imei = hex_to_ascii(value);\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\n // return;\\n //}\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n //AddValue(codeValues, \\\"customID--\\\", value);\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n break;\\n case '10': // Heartbeat\\n var heartbeat = hex_to_ascii(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 = hex2bin(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 // CustomID is not provided so far with command type 03.. commented in the mean time\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 = hex_to_ascii(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 if (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var value = message.substring(index, index = index + keyLength - 2);\\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 = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\n AddValue(codeValues, \\\"imei\\\", imei);\\n }\\n }\\n }\\n\\n function ascii_to_hexa(str) { // ascii to hex \\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\\n function 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\\n function 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 }\\n\\n function hex2bin(hex) { //\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\n }\\n\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\n var checksum = byteStringToByteArray(payloadData);\\n checksum = crc16byte(checksum);\\n checksum = decimalToHex(checksum);\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\n return changeEndianness(checksum);\\n }\\n\\n function 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\\n function debug(str) { // write debug info to console log, if localTesting\\n if (localTesting === \\\"True\\\") {\\n console.log(str);\\n }\\n }\\n\\n function decimalToHex(x) { // decimal to hex\\n x = x.toString(16).toUpperCase();\\n return x;\\n }\\n\\n function hex_to_ascii(str1) { // Hex to Ascii \\n var hex = str1.toString();\\n var str = '';\\n for (var n = 0; n < hex.length; n += 2) {\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\n }\\n return str;\\n }\\n\\n function hexToDecimalSigned(hex) { // hex to decimal\\n if (hex.length % 2 != 0) {\\n hex = \\\"0\\\" + hex;\\n }\\n var num = parseInt(hex, 16);\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\n if (num > maxVal / 2 - 1) {\\n num = num - maxVal;\\n }\\n return num;\\n }\\n\\n function hexToDecimal(x) {\\n x = parseInt(x, 16);\\n return x;\\n }\\n\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server = '127.0.0.1';\\n var port = 5678;\\n if (localTesting === \\\"True\\\") {\\n console.log('local testing - sending to acceptance server the message ... ');\\n console.log(str);\\n server = '52.174.17.77';\\n port = 5878;\\n }\\n var c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = net.createConnection(port, server);\\n });\\n c.write(`${str}`);\\n c.end();\\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":1752512140},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\n let localTesting = \\\"False\\\";\\n}\\nconst 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];\\nvar codeValues = [];\\nAddValue(codeValues, 'protocol_template', 'Rio');\\nAddValue(codeValues, 'product', serverParams.ProductName);\\nvar configsToAck = [];\\nvar configsToUpdate = [];\\nvar configsToSend = [];\\nif (globalTemplate == \\\"True\\\") {\\n if (raw.startsWith('esendex')) {\\n //general SMS message\\n }\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\n var properties = message.substring(2, 4);\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\n if (params.data.startsWith('Device location request')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Server.SetServer);\\n } else if (params.data.startsWith('IMEI:')) {\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n } else if (params.data.startsWith('Set APN ok')) {\\n configsToAck.push(configIds.SetAPN.SetAPN);\\n } else if (params.data.startsWith('Set Rio-')) {\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\n } else if (params.data.startsWith('loc')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\n } else if (params.data.startsWith('reboot ok')) {\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\n } else if (params.data.startsWith('Now:')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\n/*var dataToReceiver = {\\n 'values': codeValues\\n};\\nif (configsToAck.length > 0) {\\n dataToReceiver.configsToAck = configsToAck\\n};\\nif (configsToUpdate.length > 0) {\\n dataToReceiver.configsToUpdate = configsToUpdate\\n};\\nif (configsToSend.length > 0) {\\n dataToReceiver.configsToSend = configsToSend\\n};\\nconsole.log(dataToReceiver);*/\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n// end of main operation\\n// define functions used in operation\\nfunction sendDataToReceiver(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 console.log(dataToReceiver);\\n}\\n\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\n // Rio Decoder\\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 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 = hex_to_ascii(value);\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n break;\\n //Alarm code\\n case '02':\\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 //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 var alarm = 'Geo1';\\n } else if ((alarmCodeInt & 32) == 32) {\\n var alarm = 'Geo2';\\n } else if ((alarmCodeInt & 64) == 64) {\\n var alarm = 'Geo3';\\n } else if ((alarmCodeInt & 128) == 128) {\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n return;\\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 = hex_to_ascii(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 (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n status_data = statusDevice; //to oysta template\\n statusHex = (statusHex);\\n statusHex = hex2bin(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 = (`Eview-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 = hex_to_ascii(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 = hex_to_ascii(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 = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\n //descr = hex_to_ascii(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 = hex_to_ascii(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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\n // \\\"Eview-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 if (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`Eview-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 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 = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n case '1A':\\n //no ACK need\\n var fwVersionL = hex_to_ascii(value);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n //IMEI\\n case '03':\\n var imei = hexToDecimal(value);\\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 //GSM Module\\n case '1B':\\n //Decimal o ascii?\\n var gsmModule = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\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 switch (key) {\\n case '01': // Device ID\\n var imei = hex_to_ascii(value);\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\n // return;\\n //}\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n //AddValue(codeValues, \\\"customID--\\\", value);\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n break;\\n case '10': // Heartbeat\\n var heartbeat = hex_to_ascii(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 = hex2bin(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 // CustomID is not provided so far with command type 03.. commented in the mean time\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 = hex_to_ascii(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 if (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var value = message.substring(index, index = index + keyLength - 2);\\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 = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\n AddValue(codeValues, \\\"imei\\\", imei);\\n }\\n }\\n}\\n\\nfunction ascii_to_hexa(str) { // ascii to hex \\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 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 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}\\n\\nfunction hex2bin(hex) { //\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\n}\\n\\nfunction calculateCheckSum(payloadData) { // check if payload checksum is valid\\n var checksum = byteStringToByteArray(payloadData);\\n checksum = crc16byte(checksum);\\n checksum = decimalToHex(checksum);\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\n return changeEndianness(checksum);\\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 debug(str) { // write debug info to console log, if localTesting\\n //if (localTesting === \\\"True\\\") {\\n // console.log(str);\\n // }\\n}\\n\\nfunction decimalToHex(x) { // decimal to hex\\n x = x.toString(16).toUpperCase();\\n return x;\\n}\\n\\nfunction hex_to_ascii(str1) { // Hex to Ascii \\n var hex = str1.toString();\\n var str = '';\\n for (var n = 0; n < hex.length; n += 2) {\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\n }\\n return str;\\n}\\n\\nfunction hexToDecimalSigned(hex) { // hex to decimal\\n if (hex.length % 2 != 0) {\\n hex = \\\"0\\\" + hex;\\n }\\n var num = parseInt(hex, 16);\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\n if (num > maxVal / 2 - 1) {\\n num = num - maxVal;\\n }\\n return num;\\n}\\n\\nfunction hexToDecimal(x) {\\n x = parseInt(x, 16);\\n return x;\\n}\\n\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n //if (localTesting === \\\"True\\\") {\\n // console.log('local testing - sending to acceptance server the message ... ');\\n // console.log(str);\\n // server = '52.174.17.77';\\n //} else {\\n server = '127.0.0.1';\\n //}\\n var c = net.createConnection(5678, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5678, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1752512256},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\n let localTesting = \\\"False\\\";\\n}\\nconst 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];\\nvar codeValues = [];\\nAddValue(codeValues, 'protocol_template', 'Rio');\\nAddValue(codeValues, 'product', serverParams.ProductName);\\nvar configsToAck = [];\\nvar configsToUpdate = [];\\nvar configsToSend = [];\\nif (globalTemplate == \\\"True\\\") {\\n if (raw.startsWith('esendex')) {\\n //general SMS message\\n }\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\n var properties = message.substring(2, 4);\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\n if (params.data.startsWith('Device location request')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Server.SetServer);\\n } else if (params.data.startsWith('IMEI:')) {\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n } else if (params.data.startsWith('Set APN ok')) {\\n configsToAck.push(configIds.SetAPN.SetAPN);\\n } else if (params.data.startsWith('Set Rio-')) {\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\n } else if (params.data.startsWith('loc')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\n } else if (params.data.startsWith('reboot ok')) {\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\n } else if (params.data.startsWith('Now:')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\n/*var dataToReceiver = {\\n 'values': codeValues\\n};\\nif (configsToAck.length > 0) {\\n dataToReceiver.configsToAck = configsToAck\\n};\\nif (configsToUpdate.length > 0) {\\n dataToReceiver.configsToUpdate = configsToUpdate\\n};\\nif (configsToSend.length > 0) {\\n dataToReceiver.configsToSend = configsToSend\\n};\\nconsole.log(dataToReceiver);*/\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n// end of main operation\\n// define functions used in operation\\nfunction sendDataToReceiver(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 console.log(dataToReceiver);\\n}\\n\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\n // Rio Decoder\\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 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 = hex_to_ascii(value);\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n break;\\n //Alarm code\\n case '02':\\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 //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 var alarm = 'Geo1';\\n } else if ((alarmCodeInt & 32) == 32) {\\n var alarm = 'Geo2';\\n } else if ((alarmCodeInt & 64) == 64) {\\n var alarm = 'Geo3';\\n } else if ((alarmCodeInt & 128) == 128) {\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n return;\\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 = hex_to_ascii(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 (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\n // messageForReceiver = (`Eview-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 alarm = alarmCode = general = status_data = '';\\n //= 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; //comprobar si quitar o poner 21/04 \\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) {\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n status_data = statusDevice; //to oysta template\\n statusHex = (statusHex);\\n statusHex = hex2bin(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 = (`Eview-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 = hex_to_ascii(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 = hex_to_ascii(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 = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\n //descr = hex_to_ascii(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 = hex_to_ascii(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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\n // \\\"Eview-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 if (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`Eview-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 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 = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n case '1A':\\n //no ACK need\\n var fwVersionL = hex_to_ascii(value);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n //IMEI\\n case '03':\\n var imei = hexToDecimal(value);\\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 //GSM Module\\n case '1B':\\n //Decimal o ascii?\\n var gsmModule = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\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 switch (key) {\\n case '01': // Device ID\\n var imei = hex_to_ascii(value);\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\n // return;\\n //}\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n //AddValue(codeValues, \\\"customID--\\\", value);\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n break;\\n case '10': // Heartbeat\\n var heartbeat = hex_to_ascii(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 = hex2bin(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 // CustomID is not provided so far with command type 03.. commented in the mean time\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 = hex_to_ascii(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 if (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var value = message.substring(index, index = index + keyLength - 2);\\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 = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\n AddValue(codeValues, \\\"imei\\\", imei);\\n }\\n }\\n}\\n\\nfunction ascii_to_hexa(str) { // ascii to hex \\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 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 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}\\n\\nfunction hex2bin(hex) { //\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\n}\\n\\nfunction calculateCheckSum(payloadData) { // check if payload checksum is valid\\n var checksum = byteStringToByteArray(payloadData);\\n checksum = crc16byte(checksum);\\n checksum = decimalToHex(checksum);\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\n return changeEndianness(checksum);\\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 debug(str) { // write debug info to console log, if localTesting\\n //if (localTesting === \\\"True\\\") {\\n // console.log(str);\\n // }\\n}\\n\\nfunction decimalToHex(x) { // decimal to hex\\n x = x.toString(16).toUpperCase();\\n return x;\\n}\\n\\nfunction hex_to_ascii(str1) { // Hex to Ascii \\n var hex = str1.toString();\\n var str = '';\\n for (var n = 0; n < hex.length; n += 2) {\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\n }\\n return str;\\n}\\n\\nfunction hexToDecimalSigned(hex) { // hex to decimal\\n if (hex.length % 2 != 0) {\\n hex = \\\"0\\\" + hex;\\n }\\n var num = parseInt(hex, 16);\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\n if (num > maxVal / 2 - 1) {\\n num = num - maxVal;\\n }\\n return num;\\n}\\n\\nfunction hexToDecimal(x) {\\n x = parseInt(x, 16);\\n return x;\\n}\\n\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n //if (localTesting === \\\"True\\\") {\\n // console.log('local testing - sending to acceptance server the message ... ');\\n // console.log(str);\\n // server = '52.174.17.77';\\n //} else {\\n server = '127.0.0.1';\\n //}\\n var c = net.createConnection(5678, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5678, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1754556277},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\n let localTesting = \\\"False\\\";\\n}\\nconst 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];\\nvar codeValues = [];\\nAddValue(codeValues, 'protocol_template', 'Rio');\\nAddValue(codeValues, 'product', serverParams.ProductName);\\nvar configsToAck = [];\\nvar configsToUpdate = [];\\nvar configsToSend = [];\\nif (globalTemplate == \\\"True\\\") {\\n if (raw.startsWith('esendex')) {\\n //general SMS message\\n }\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\n var properties = message.substring(2, 4);\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\n if (params.data.startsWith('Device location request')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Server.SetServer);\\n } else if (params.data.startsWith('IMEI:')) {\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n } else if (params.data.startsWith('Set APN ok')) {\\n configsToAck.push(configIds.SetAPN.SetAPN);\\n } else if (params.data.startsWith('Set Rio-')) {\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\n } else if (params.data.startsWith('loc')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\n } else if (params.data.startsWith('reboot ok')) {\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\n } else if (params.data.startsWith('Now:')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\n/*var dataToReceiver = {\\n 'values': codeValues\\n};\\nif (configsToAck.length > 0) {\\n dataToReceiver.configsToAck = configsToAck\\n};\\nif (configsToUpdate.length > 0) {\\n dataToReceiver.configsToUpdate = configsToUpdate\\n};\\nif (configsToSend.length > 0) {\\n dataToReceiver.configsToSend = configsToSend\\n};\\nconsole.log(dataToReceiver);*/\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n// end of main operation\\n// define functions used in operation\\nfunction sendDataToReceiver(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 console.log(dataToReceiver);\\n}\\n\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\n // Rio Decoder\\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 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 = hex_to_ascii(value);\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n break;\\n //Alarm code\\n case '02':\\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 //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 var alarm = 'Geo1';\\n } else if ((alarmCodeInt & 32) == 32) {\\n var alarm = 'Geo2';\\n } else if ((alarmCodeInt & 64) == 64) {\\n var alarm = 'Geo3';\\n } else if ((alarmCodeInt & 128) == 128) {\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n return;\\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 = hex_to_ascii(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 (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\n // messageForReceiver = (`Eview-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 //alarm = alarmCode = general = status_data = '';\\n //= 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; //comprobar si quitar o poner 21/04 \\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) {\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n status_data = statusDevice; //to oysta template\\n statusHex = (statusHex);\\n statusHex = hex2bin(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 = (`Eview-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 = hex_to_ascii(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 = hex_to_ascii(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 = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\n //descr = hex_to_ascii(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 = hex_to_ascii(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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\n // \\\"Eview-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 if (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`Eview-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 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 = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n case '1A':\\n //no ACK need\\n var fwVersionL = hex_to_ascii(value);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n //IMEI\\n case '03':\\n var imei = hexToDecimal(value);\\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 //GSM Module\\n case '1B':\\n //Decimal o ascii?\\n var gsmModule = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\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 switch (key) {\\n case '01': // Device ID\\n var imei = hex_to_ascii(value);\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\n // return;\\n //}\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n //AddValue(codeValues, \\\"customID--\\\", value);\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n break;\\n case '10': // Heartbeat\\n var heartbeat = hex_to_ascii(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 = hex2bin(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 // CustomID is not provided so far with command type 03.. commented in the mean time\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 = hex_to_ascii(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 if (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var value = message.substring(index, index = index + keyLength - 2);\\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 = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\n AddValue(codeValues, \\\"imei\\\", imei);\\n }\\n }\\n}\\n\\nfunction ascii_to_hexa(str) { // ascii to hex \\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 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 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}\\n\\nfunction hex2bin(hex) { //\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\n}\\n\\nfunction calculateCheckSum(payloadData) { // check if payload checksum is valid\\n var checksum = byteStringToByteArray(payloadData);\\n checksum = crc16byte(checksum);\\n checksum = decimalToHex(checksum);\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\n return changeEndianness(checksum);\\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 debug(str) { // write debug info to console log, if localTesting\\n //if (localTesting === \\\"True\\\") {\\n // console.log(str);\\n // }\\n}\\n\\nfunction decimalToHex(x) { // decimal to hex\\n x = x.toString(16).toUpperCase();\\n return x;\\n}\\n\\nfunction hex_to_ascii(str1) { // Hex to Ascii \\n var hex = str1.toString();\\n var str = '';\\n for (var n = 0; n < hex.length; n += 2) {\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\n }\\n return str;\\n}\\n\\nfunction hexToDecimalSigned(hex) { // hex to decimal\\n if (hex.length % 2 != 0) {\\n hex = \\\"0\\\" + hex;\\n }\\n var num = parseInt(hex, 16);\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\n if (num > maxVal / 2 - 1) {\\n num = num - maxVal;\\n }\\n return num;\\n}\\n\\nfunction hexToDecimal(x) {\\n x = parseInt(x, 16);\\n return x;\\n}\\n\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n //if (localTesting === \\\"True\\\") {\\n // console.log('local testing - sending to acceptance server the message ... ');\\n // console.log(str);\\n // server = '52.174.17.77';\\n //} else {\\n server = '127.0.0.1';\\n //}\\n var c = net.createConnection(5678, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5678, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1754579334},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template \\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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// --- utils ---\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1756659844},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template \\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\r\\n var index = 18;\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\r\\n // need to check if checksum is correct for possible msg corruption \\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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// --- utils ---\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1756660884},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.7\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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 //alarm = alarmCode = general = status_data = '';\\r\\n //= 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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n //if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1756665913},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.8\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"false\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template \\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\r\\n var index = 18;\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\r\\n // need to check if checksum is correct for possible msg corruption \\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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// --- utils ---\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1756666536},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.8\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = false;\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template \\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\r\\n var index = 18;\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\r\\n // need to check if checksum is correct for possible msg corruption \\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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// --- utils ---\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1756666787},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.7\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = false;\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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 //alarm = alarmCode = general = status_data = '';\\r\\n //= 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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.debug('local testing - sending to acceptance server the message ... ');\\r\\n console.debug(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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1756667194},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.8\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = false;\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template \\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\r\\n var index = 18;\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\r\\n // need to check if checksum is correct for possible msg corruption \\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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// --- utils ---\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1756667740},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.7\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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 //alarm = alarmCode = general = status_data = '';\\r\\n //= 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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n //if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1756668617},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.8\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = false;\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template\\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\r\\n var index = 18;\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\r\\n // need to check if checksum is correct for possible msg corruption \\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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// --- utils ---\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1756716942},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.8\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = false;\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template\\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\r\\n var index = 18;\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\r\\n // need to check if checksum is correct for possible msg corruption \\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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// --- utils ---\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1756742711},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.8.1\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = false;\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template\\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 (params.location_time) {\\r\\n AddValue(codeValues, 'location_time', params.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 (params.location_time) {\\r\\n AddValue(codeValues, 'location_time', params.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 (params.location_time) {\\r\\n AddValue(codeValues, 'location_time', params.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 (params.location_time) {\\r\\n AddValue(codeValues, 'location_time', params.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] ?? \\\"undefined\\\";\\r\\n var batLevel = gen_location[1] ?? \\\"undefined\\\";\\r\\n var mac2 = gen_location[2] ?? \\\"undefined\\\";\\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 (params.location_time) {\\r\\n AddValue(codeValues, 'location_time', params.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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\r\\n var index = 18;\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\r\\n // need to check if checksum is correct for possible msg corruption \\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //first it is initializated equal to status, but if alarm or other event, it is changed.\\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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// --- utils ---\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1757012186},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.8.2\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = false;\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template\\r\\n // first decoding data of Oysta templates\\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 }\\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 }\\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 }\\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 }\\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] ?? \\\"undefined\\\";\\r\\n var batLevel = gen_location[1] ?? \\\"undefined\\\";\\r\\n var mac2 = gen_location[2] ?? \\\"undefined\\\";\\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 }\\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 // Add time values\\r\\n if (params.location_time) {\\r\\n AddValue(codeValues, 'location_time', params.location_time);\\r\\n }\\r\\n if (params.event_time) {\\r\\n AddValue(codeValues, 'event_time', params.event_time);\\r\\n }\\r\\n // SMS message sent in\\r\\n if (messageTypeLocalCode == 'COMM-SMS') {\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// decoder global template function\\r\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\r\\n var index = 18;\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\r\\n // need to check if checksum is correct for possible msg corruption \\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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 = '';\\r\\n //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 // if timestamp is older than 1 year, update it (AGPS bug)\\r\\n if (timestamp < moment.utc().subtract(1, \\\"year\\\").unix()) {\\r\\n timestamp = moment.utc().unix();\\r\\n }\\r\\n location_time = timestamp;\\r\\n event_time = timestamp; //first it is initializated equal to status, but if alarm or other event, it is changed.\\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 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 = (`Eview-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 //}\\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// define functions used in operation\\r\\nfunction 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\\nfunction 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// --- utils ---\\r\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\\r\\n// test Utils\\r\\nfunction 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\\nfunction 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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1757092625},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.8.3\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = false;\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template\\r\\n // first decoding data of Oysta templates\\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 }\\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 }\\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 }\\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 }\\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] ?? \\\"undefined\\\";\\r\\n var batLevel = gen_location[1] ?? \\\"undefined\\\";\\r\\n var mac2 = gen_location[2] ?? \\\"undefined\\\";\\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 }\\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 // Add time values\\r\\n if (params.location_time) {\\r\\n AddValue(codeValues, 'location_time', params.location_time);\\r\\n }\\r\\n if (params.event_time) {\\r\\n AddValue(codeValues, 'event_time', params.event_time);\\r\\n }\\r\\n // SMS message sent in\\r\\n if (messageTypeLocalCode == 'COMM-SMS') {\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// decoder global template function\\r\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\r\\n var index = 18;\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\r\\n // need to check if checksum is correct for possible msg corruption \\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 // if timestamp is older than 1 year, update it (AGPS bug)\\r\\n if (timestamp < moment.utc().subtract(1, \\\"year\\\").unix()) {\\r\\n timestamp += 619315200; //moment.utc().unix();\\r\\n }\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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 = '';\\r\\n //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 // if timestamp is older than 1 year, update it (AGPS bug)\\r\\n if (timestamp < moment.utc().subtract(1, \\\"year\\\").unix()) {\\r\\n timestamp += 619315200; //moment.utc().unix();\\r\\n }\\r\\n location_time = timestamp;\\r\\n event_time = timestamp; //first it is initializated equal to status, but if alarm or other event, it is changed.\\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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, quizas meter dentro del if (alarmcode)\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 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 = (`Eview-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 //}\\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// define functions used in operation\\r\\nfunction 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\\nfunction 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// --- utils ---\\r\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\\r\\n// test Utils\\r\\nfunction 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\\nfunction 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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1757345176},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.8.3\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = false;\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template\\r\\n // first decoding data of Oysta templates\\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 }\\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 }\\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 }\\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 }\\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] || \\\"undefined\\\";\\r\\n var batLevel = gen_location[1] || \\\"undefined\\\";\\r\\n var mac2 = gen_location[2] || \\\"undefined\\\";\\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 }\\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 // Add time values\\r\\n if (params.location_time) {\\r\\n AddValue(codeValues, 'location_time', params.location_time);\\r\\n }\\r\\n if (params.event_time) {\\r\\n AddValue(codeValues, 'event_time', params.event_time);\\r\\n }\\r\\n // SMS message sent in\\r\\n if (messageTypeLocalCode == 'COMM-SMS') {\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// decoder global template function\\r\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\r\\n var index = 18;\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\r\\n // need to check if checksum is correct for possible msg corruption \\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 // if timestamp is older than 1 year, update it (AGPS bug)\\r\\n if (timestamp < moment.utc().subtract(1, \\\"year\\\").unix()) {\\r\\n timestamp += 619315200; //moment.utc().unix();\\r\\n }\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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 = '';\\r\\n //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 // if timestamp is older than 1 year, update it (AGPS bug)\\r\\n if (timestamp < moment.utc().subtract(1, \\\"year\\\").unix()) {\\r\\n timestamp += 619315200; //moment.utc().unix();\\r\\n }\\r\\n location_time = timestamp;\\r\\n event_time = timestamp; //first it is initializated equal to status, but if alarm or other event, it is changed.\\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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, quizas meter dentro del if (alarmcode)\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 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 = (`Eview-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 //}\\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// define functions used in operation\\r\\nfunction 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\\nfunction 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// --- utils ---\\r\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\\r\\n// test Utils\\r\\nfunction 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\\nfunction 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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1757507054}]},{"Id":231,"Name":"OnUpdateProtocol_EView","Operation":"let 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":[{"Type":0,"NewValue":"{\"Id\":231,\"Name\":\"OnUpdateProtocol_EView\",\"Operation\":\"let 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\":[]}","Timestamp":1696071788},{"Type":1,"NewValue":"{\"Id\":231,\"Name\":\"OnUpdateProtocol_EView\",\"Operation\":\"let configsToUpdate = [];\\r\\nif (configs.WiFiConnect.EnableDisableWiFiConnect === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.WiFiConnect.EnableDisableWiFiConnect,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\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\":[]}","Timestamp":1707127809},{"Type":1,"NewValue":"{\"Id\":231,\"Name\":\"OnUpdateProtocol_EView\",\"Operation\":\"let configsToUpdate = [];\\r\\nif (configs.Controls.ConfigurationMode === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.Controls.ConfigurationMode,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\r\\nif (configs.WiFiConnect.EnableDisableWiFiConnect === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.WiFiConnect.EnableDisableWiFiConnect,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\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\":[]}","Timestamp":1708276363},{"Type":1,"NewValue":"{\"Id\":231,\"Name\":\"OnUpdateProtocol_EView\",\"Operation\":\"let configsToUpdate = [];\\r\\nif (configs.HeartRateMonitor.HeartRateWatchFace === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.HeartRateMonitor.HeartRateWatchFace,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\r\\nif (configs.StepCounting.StepCountingWatchFace === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.StepCounting.StepCountingWatchFace,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\r\\nif (configs.Controls.ConfigurationMode === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.Controls.ConfigurationMode,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\r\\nif (configs.WiFiConnect.EnableDisableWiFiConnect === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.WiFiConnect.EnableDisableWiFiConnect,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\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\":[]}","Timestamp":1709751672},{"Type":1,"NewValue":"{\"Id\":231,\"Name\":\"OnUpdateProtocol_EView\",\"Operation\":\"let configsToUpdate = [];\\r\\nif (configs.WatchFace.SetWatchFace === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.WatchFace.SetWatchFace,\\r\\n 'value': '00'\\r\\n });\\r\\n}\\r\\nif (configs.WatchFace.HeartRateWatchFace === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.WatchFace.HeartRateWatchFace,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\r\\nif (configs.WatchFace.StepCountingWatchFace === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.WatchFace.StepCountingWatchFace,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\r\\nif (configs.Controls.ConfigurationMode === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.Controls.ConfigurationMode,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\r\\nif (configs.WiFiConnect.EnableDisableWiFiConnect === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.WiFiConnect.EnableDisableWiFiConnect,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\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\":[]}","Timestamp":1709837697}]}],"Groups":[{"Id":5010,"Parent":null,"Name":"Admin Settings","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5011,"Parent":null,"Name":"Feature Settings","Json":"{ \"description\": null, \"columns\": 1, \"order\": 1, \"listSize\": 1, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5012,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"SMS Prefix","Json":"{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5012,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"SMS Prefix\",\"Json\":\"{\\\"description\\\":\\\"SMS Prefix\\\",\\\"columns\\\":1,\\\"order\\\":7,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508098},{"Type":1,"NewValue":"{\"Id\":5012,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"SMS Prefix\",\"Json\":\"{\\\"description\\\":\\\"SMS Prefix\\\",\\\"columns\\\":1,\\\"order\\\":9,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182533}]},{"Id":5013,"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Alarm Clock","Json":"{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5014,"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"SOS Button Settings","Json":"{\"description\":\"SOS Button Settings\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5015,"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Alerts","Json":"{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5016,"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Find Device","Json":"{\"description\":\"Find Device\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5017,"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Device Settings","Json":"{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5018,"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"White List","Json":"{\"description\":null,\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5019,"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Speed Dial Button Settings","Json":"{\"description\":\"Speed Dial / Set Contact 2\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5020,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"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\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5020,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"No Activity\",\"Json\":\"{\\\"description\\\":\\\"No Activity\\\",\\\"columns\\\":1,\\\"order\\\":4,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1694508086},{"Type":1,"NewValue":"{\"Id\":5020,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"No Activity\",\"Json\":\"{\\\"description\\\":\\\"No Activity\\\",\\\"columns\\\":1,\\\"order\\\":6,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182518}]},{"Id":5021,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Voice Prompt","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\":5021,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Voice Prompt\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":5,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1694508090},{"Type":1,"NewValue":"{\"Id\":5021,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Voice Prompt\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":7,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182523}]},{"Id":5022,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Update Firmware","Json":"{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5022,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Update Firmware\",\"Json\":\"{\\\"description\\\":\\\"Over the Air update of device firmware\\\",\\\"columns\\\":1,\\\"order\\\":6,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508094},{"Type":1,"NewValue":"{\"Id\":5022,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Update Firmware\",\"Json\":\"{\\\"description\\\":\\\"Over the Air update of device firmware\\\",\\\"columns\\\":1,\\\"order\\\":8,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182528}]},{"Id":5023,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Device Reboot","Json":"{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5023,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Device Reboot\",\"Json\":\"{\\\"description\\\":\\\"Device Reboot\\\",\\\"columns\\\":1,\\\"order\\\":19,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508144},{"Type":1,"NewValue":"{\"Id\":5023,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Device Reboot\",\"Json\":\"{\\\"description\\\":\\\"Device Reboot\\\",\\\"columns\\\":1,\\\"order\\\":20,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1706784485},{"Type":1,"NewValue":"{\"Id\":5023,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":22,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Device Reboot\",\"Json\":\"{\\\"description\\\":\\\"Device Reboot\\\",\\\"columns\\\":1,\\\"order\\\":22,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182588}]},{"Id":5024,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Device Version","Json":"{\"description\":\"Device Version\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5024,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Device Version\",\"Json\":\"{\\\"description\\\":\\\"Device Version\\\",\\\"columns\\\":1,\\\"order\\\":3,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1694508083},{"Type":1,"NewValue":"{\"Id\":5024,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Device Version\",\"Json\":\"{\\\"description\\\":\\\"Device Version\\\",\\\"columns\\\":1,\\\"order\\\":5,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182514}]},{"Id":5025,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Factory Reset","Json":"{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5025,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Factory Reset\",\"Json\":\"{\\\"description\\\":\\\"Factory Reset\\\",\\\"columns\\\":1,\\\"order\\\":18,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508140},{"Type":1,"NewValue":"{\"Id\":5025,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Factory Reset\",\"Json\":\"{\\\"description\\\":\\\"Factory Reset\\\",\\\"columns\\\":1,\\\"order\\\":19,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1706784480},{"Type":1,"NewValue":"{\"Id\":5025,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Factory Reset\",\"Json\":\"{\\\"description\\\":\\\"Factory Reset\\\",\\\"columns\\\":1,\\\"order\\\":21,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182584}]},{"Id":5026,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Working Mode","Json":"{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5026,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Working Mode\",\"Json\":\"{\\\"description\\\":\\\"Different modes for communication\\\",\\\"columns\\\":1,\\\"order\\\":13,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508121},{"Type":1,"NewValue":"{\"Id\":5026,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Working Mode\",\"Json\":\"{\\\"description\\\":\\\"Different modes for communication\\\",\\\"columns\\\":1,\\\"order\\\":14,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1706784457},{"Type":1,"NewValue":"{\"Id\":5026,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Working Mode\",\"Json\":\"{\\\"description\\\":\\\"Different modes for communication\\\",\\\"columns\\\":1,\\\"order\\\":16,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182564}]},{"Id":5027,"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"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\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5028,"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Welfare Check","Json":"{\"description\":\"Welfare Check (Only Rio)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5029,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Enable Control","Json":"{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5029,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Enable Control\",\"Json\":\"{\\\"description\\\":\\\"Enable Control\\\",\\\"columns\\\":1,\\\"order\\\":12,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1694508117},{"Type":1,"NewValue":"{\"Id\":5029,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Enable Control\",\"Json\":\"{\\\"description\\\":\\\"Enable Control\\\",\\\"columns\\\":1,\\\"order\\\":11,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1694508340},{"Type":1,"NewValue":"{\"Id\":5029,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Enable Control\",\"Json\":\"{\\\"description\\\":\\\"Enable Control\\\",\\\"columns\\\":1,\\\"order\\\":12,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1706784449},{"Type":1,"NewValue":"{\"Id\":5029,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Enable Control\",\"Json\":\"{\\\"description\\\":\\\"Enable Control\\\",\\\"columns\\\":1,\\\"order\\\":14,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182555}]},{"Id":5030,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Power Off","Json":"{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5030,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Power Off\",\"Json\":\"{\\\"description\\\":\\\"Power Off\\\",\\\"columns\\\":1,\\\"order\\\":20,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508148},{"Type":1,"NewValue":"{\"Id\":5030,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Power Off\",\"Json\":\"{\\\"description\\\":\\\"Power Off\\\",\\\"columns\\\":1,\\\"order\\\":21,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1706784490},{"Type":1,"NewValue":"{\"Id\":5030,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":23,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":22,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Power Off\",\"Json\":\"{\\\"description\\\":\\\"Power Off\\\",\\\"columns\\\":1,\\\"order\\\":23,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182593}]},{"Id":5031,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set APN","Json":"{\"description\":\"Set APN\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5031,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Set APN\",\"Json\":\"{\\\"description\\\":\\\"Set APN\\\",\\\"columns\\\":1,\\\"order\\\":9,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508107},{"Type":1,"NewValue":"{\"Id\":5031,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Set APN\",\"Json\":\"{\\\"description\\\":\\\"Set APN\\\",\\\"columns\\\":1,\\\"order\\\":11,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182542}]},{"Id":5032,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Request Location","Json":"{\"description\":\"Request Location\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5032,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Request Location\",\"Json\":\"{\\\"description\\\":\\\"Request Location\\\",\\\"columns\\\":1,\\\"order\\\":10,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1694508110},{"Type":1,"NewValue":"{\"Id\":5032,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Request Location\",\"Json\":\"{\\\"description\\\":\\\"Request Location\\\",\\\"columns\\\":1,\\\"order\\\":11,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1706784444},{"Type":1,"NewValue":"{\"Id\":5032,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Request Location\",\"Json\":\"{\\\"description\\\":\\\"Request Location\\\",\\\"columns\\\":1,\\\"order\\\":13,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182551}]},{"Id":5033,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Delete Records","Json":"{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5033,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Delete Records\",\"Json\":\"{\\\"description\\\":\\\"Delete Records\\\",\\\"columns\\\":1,\\\"order\\\":17,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508137},{"Type":1,"NewValue":"{\"Id\":5033,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Delete Records\",\"Json\":\"{\\\"description\\\":\\\"Delete Records\\\",\\\"columns\\\":1,\\\"order\\\":18,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1706784476},{"Type":1,"NewValue":"{\"Id\":5033,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Delete Records\",\"Json\":\"{\\\"description\\\":\\\"Delete Records\\\",\\\"columns\\\":1,\\\"order\\\":20,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182579}]},{"Id":5034,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"SMS Password","Json":"{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5034,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"SMS Password\",\"Json\":\"{\\\"description\\\":\\\"Function not available\\\",\\\"columns\\\":1,\\\"order\\\":11,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508114},{"Type":1,"NewValue":"{\"Id\":5034,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"SMS Password\",\"Json\":\"{\\\"description\\\":\\\"Function not available\\\",\\\"columns\\\":1,\\\"order\\\":12,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508344},{"Type":1,"NewValue":"{\"Id\":5034,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"SMS Password\",\"Json\":\"{\\\"description\\\":\\\"Function not available\\\",\\\"columns\\\":1,\\\"order\\\":13,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1706784453},{"Type":1,"NewValue":"{\"Id\":5034,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"SMS Password\",\"Json\":\"{\\\"description\\\":\\\"Function not available\\\",\\\"columns\\\":1,\\\"order\\\":15,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182560}]},{"Id":5035,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"{\"description\":\"Server\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5035,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Server\",\"Json\":\"{\\\"description\\\":\\\"Server\\\",\\\"columns\\\":1,\\\"order\\\":8,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508103},{"Type":1,"NewValue":"{\"Id\":5035,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Server\",\"Json\":\"{\\\"description\\\":\\\"Server\\\",\\\"columns\\\":1,\\\"order\\\":10,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182538}]},{"Id":5036,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Continuous Locate","Json":"{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5036,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Continuous Locate\",\"Json\":\"{\\\"description\\\":\\\"Continuous Locate if Alert is triggered\\\",\\\"columns\\\":1,\\\"order\\\":15,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508129},{"Type":1,"NewValue":"{\"Id\":5036,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Continuous Locate\",\"Json\":\"{\\\"description\\\":\\\"Continuous Locate if Alert is triggered\\\",\\\"columns\\\":1,\\\"order\\\":16,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1706784467},{"Type":1,"NewValue":"{\"Id\":5036,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Continuous Locate\",\"Json\":\"{\\\"description\\\":\\\"Continuous Locate if Alert is triggered\\\",\\\"columns\\\":1,\\\"order\\\":18,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182572}]},{"Id":5037,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Cycle Interval","Json":"{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5037,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Cycle Interval\",\"Json\":\"{\\\"description\\\":\\\"Cycle Interval\\\",\\\"columns\\\":1,\\\"order\\\":14,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1694508126},{"Type":1,"NewValue":"{\"Id\":5037,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Cycle Interval\",\"Json\":\"{\\\"description\\\":\\\"Cycle Interval\\\",\\\"columns\\\":1,\\\"order\\\":15,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1706784461},{"Type":1,"NewValue":"{\"Id\":5037,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Cycle Interval\",\"Json\":\"{\\\"description\\\":\\\"Cycle Interval\\\",\\\"columns\\\":1,\\\"order\\\":17,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182568}]},{"Id":5038,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"System Language","Json":"{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5038,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"System Language\",\"Json\":\"{\\\"description\\\":\\\"System Language\\\",\\\"columns\\\":1,\\\"order\\\":16,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1694508133},{"Type":1,"NewValue":"{\"Id\":5038,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"System Language\",\"Json\":\"{\\\"description\\\":\\\"System Language\\\",\\\"columns\\\":1,\\\"order\\\":17,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1706784471},{"Type":1,"NewValue":"{\"Id\":5038,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"System Language\",\"Json\":\"{\\\"description\\\":\\\"System Language\\\",\\\"columns\\\":1,\\\"order\\\":19,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182576}]},{"Id":5039,"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Beacon 10","Json":"{\"description\":\"Set Beacon 10\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5040,"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Alarm Clock 2","Json":"{\"description\":\"Alarm Clock 2\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5041,"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Alarm Clock 3","Json":"{\"description\":\"Alarm Clock 3\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5042,"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Alarm Clock 1","Json":"{\"description\":\"Alarm Clock 1\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5043,"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Beacon 1","Json":"{\"description\":\"Set Beacon 1\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5044,"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Beacon 2","Json":"{\"description\":\"Set Beacon 2\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5045,"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Beacon 3","Json":"{\"description\":\"Set Beacon 3\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5046,"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Beacon 4","Json":"{\"description\":\"Set Beacon 4\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5047,"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Beacon 5","Json":"{\"description\":\"Set Beacon 5\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5048,"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Beacon 7","Json":"{\"description\":\"Set Beacon 7\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5049,"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Beacon 8","Json":"{\"description\":\"Set Beacon 8\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5050,"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Beacon 9","Json":"{\"description\":\"Set Beacon 9\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5051,"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Alarm Clock 4","Json":"{\"description\":\"Alarm Clock 4\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5052,"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Beacon 6","Json":"{\"description\":\"Set Beacon 6\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5053,"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Fall Alarm","Json":"{\"description\":\"Fall Alarm\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5054,"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Movement Alert","Json":"{\"description\":\"Movement Alert\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5055,"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"White List Number 6","Json":"{\"description\":\"White List Number 6\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5056,"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"White List Number 8","Json":"{\"description\":\"White List Number 8\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5057,"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"White List Number 7","Json":"{\"description\":\"White List Number 7\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5058,"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"White List Number 5","Json":"{\"description\":\"White List Number 5\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5059,"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"White List Number 2","Json":"{\"description\":\"White List Number 2\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5060,"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"White List Number 1","Json":"{\"description\":\"White List Number 1\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5061,"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"White List Number 4","Json":"{\"description\":\"White List Number 4\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5062,"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Tilt Alert","Json":"{\"description\":\"Tilt Alert\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5063,"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Voice Prompt Volume","Json":"{\"description\":\"Voice Prompt Volume\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5064,"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Mic Volume","Json":"{\"description\":\"Mic Volume\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5065,"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Ring Tone Volume","Json":"{\"description\":\"Ring Tone Volume\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5066,"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Do Not Disturb","Json":"{\"description\":\"Do Not Disturb\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5067,"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Phone Settings","Json":"{\"description\":\"Phone Settings\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5068,"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"NonMovement Alert","Json":"{\"description\":\"Non-movement Alert\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5069,"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Power Alert","Json":"{\"description\":\"Power Alert\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5070,"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Over Speed Alert","Json":"{\"description\":\"Over Speed Alert\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5071,"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Speaker Volume","Json":"{\"description\":\"Speaker Volume\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5072,"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"White List Number 3","Json":"{\"description\":\"White List Number 3\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5173,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Heart Rate Monitor","Json":"{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5173,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Heart Rate Monitor\",\"Json\":\"{\\\"description\\\":\\\"Heart Rate Monitor (Only Watch)\\\",\\\"columns\\\":1,\\\"order\\\":3,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182472}]},{"Id":5180,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Step Counting","Json":"{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":5180,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Step Counting\",\"Json\":\"{\\\"description\\\":\\\"Step Counting (Only Watch)\\\",\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1694507879},{"Type":1,"NewValue":"{\"Id\":5180,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Step Counting\",\"Json\":\"{\\\"description\\\":\\\"Step Counting (Only Watch)\\\",\\\"columns\\\":1,\\\"order\\\":2,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1694508080},{"Type":1,"NewValue":"{\"Id\":5180,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Step Counting\",\"Json\":\"{\\\"description\\\":\\\"Step Counting (Only Watch)\\\",\\\"columns\\\":1,\\\"order\\\":4,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182509}]},{"Id":5420,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":19,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":20,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5420,"Name":"WiFi Connect","Json":{"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":"WiFi Connect","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":5420,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"WiFi Connect\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1706034970},{"Type":1,"NewValue":"{\"Id\":5420,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"WiFi Connect\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":10,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1706784440},{"Type":1,"NewValue":"{\"Id\":5420,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"WiFi Connect\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":12,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182547}]},{"Id":5522,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5420,"Name":"WiFi Connect","Json":{"description":null,"columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":20,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":19,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":21,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5522,"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":[]}]},"Name":"Controls","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":5522,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"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,\"ProtocolActionObjects\":[]}","Timestamp":1708016932},{"Type":1,"NewValue":"{\"Id\":5522,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":22,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":23,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"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,\"ProtocolActionObjects\":[]}","Timestamp":1718618566}]},{"Id":5605,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5420,"Name":"WiFi Connect","Json":{"description":null,"columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5522,"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":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":20,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":19,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":21,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5605,"Name":"Watch Face","Json":{"description":"Watch Face (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Watch Face","Json":"{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":5605,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Watch Face\",\"Json\":\"{\\\"description\\\":\\\"Watch Face (Only Watch)\\\",\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1709836244},{"Type":1,"NewValue":"{\"Id\":5605,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Watch Face\",\"Json\":\"{\\\"description\\\":\\\"Watch Face (Only Watch)\\\",\\\"columns\\\":1,\\\"order\\\":2,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182468}]},{"Id":7436,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5420,"Name":"WiFi Connect","Json":{"description":null,"columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5605,"Name":"Watch Face","Json":{"description":"Watch Face (Only Watch)","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5522,"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":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":19,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":20,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":21,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":22,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":23,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":7436,"Name":"Convert Device","Json":{"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":"Convert Device","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":7436,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":22,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":23,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":7436,\"Name\":\"Convert Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Convert Device\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"LanguageId\":null,\"ProtocolActionObjects\":[]}","Timestamp":1753799991},{"Type":2,"NewValue":"{\"Id\":7436,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":7436,\"Name\":\"Convert Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Convert Device\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"LanguageId\":null,\"ProtocolActionObjects\":[]}","Timestamp":1761240154}]}],"GroupParams":[{"Id":8204,"Group":{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"SMS Prefix","Json":"{\"name\":\"SMS Prefix\",\"default\":\"true\",\"description\":\"Prefix\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"DEPRECATED: Only use to disable on devices that already have it enabled. The feature adds the IMEI to the start of any SMS sent back from the Rio.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8145,"Group":{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Call","Json":"{\"name\":\"Call\",\"default\":\"\",\"description\":\"Call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle Call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8151,"Group":{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Ring Time","Json":"{\"name\":\"Ring Time\",\"default\":\"\",\"description\":\"Ring Time\",\"type\":\"number\",\"suffix\":\"seconds\",\"prefix\":null,\"min\":1,\"max\":60,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The time the Rio will ring for before dropping the call.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":5}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8150,"Group":{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Retries","Json":"{\"name\":\"Retries\",\"default\":\"\",\"description\":\"Retries\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":0,\"max\":10,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The number of times the call will be retried if call failes. (0=infinite)\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8149,"Group":{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Number","Json":"{\"name\":\"Number\",\"default\":\"\",\"description\":\"Phone Number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8148,"Group":{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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 SOS Button Settings","Json":"{\"name\":\"Enable Disable SOS Button Settings\",\"default\":\"true\",\"description\":\"Toggle SOS Button Settings\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8147,"Group":{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Feedback","Json":"{\"name\":\"Feedback\",\"default\":\"\",\"description\":\"Feedback\",\"type\":\"radioGroup\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"How the Rio responds when an SOS is triggered.\",\"options\":[{\"value\":\"00\",\"label\":\"No Feedback\"},{\"value\":\"01\",\"label\":\"Vibrate only\"},{\"value\":\"10\",\"label\":\"Voice only\"},{\"value\":\"11\",\"label\":\"Voice and vibration\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8146,"Group":{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Trigger Mode","Json":"{\"name\":\"Trigger Mode\",\"default\":\"\",\"description\":\"Trigger Mode\",\"type\":\"radioGroup\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The method for triggering the SOS\",\"options\":[{\"value\":\"0\",\"label\":\"Long Press\"},{\"value\":\"1\",\"label\":\"Double Press\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"],\"order\":6}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8152,"Group":{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Find Device","Json":"{\"name\":\"Find Device\",\"default\":\"\",\"description\":\"Find Device\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Click this to send a command to the Rio that will help the VIP find their device if lost in the home. The Rio will emit a sound.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8158,"Group":{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Number","Json":"{\"name\":\"Number\",\"default\":\"\",\"description\":\"Phone Number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8157,"Group":{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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 Speed Dial","Json":"{\"name\":\"Enable Disable Speed Dial\",\"default\":\"true\",\"description\":\"Toggle Speed Dial\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Use secondary call button\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8156,"Group":{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Feedback","Json":"{\"name\":\"Feedback\",\"default\":\"\",\"description\":\"Feedback\",\"type\":\"radioGroup\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"How the Rio responds when a call is made using the secondary call button\",\"options\":[{\"value\":\"00\",\"label\":\"No Feedback\"},{\"value\":\"01\",\"label\":\"Vibrate only\"},{\"value\":\"10\",\"label\":\"Voice only\"},{\"value\":\"11\",\"label\":\"Vibrate and Voice\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8155,"Group":{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Trigger Mode","Json":"{\"name\":\"Trigger Mode\",\"default\":\"\",\"description\":\"Trigger mode\",\"type\":\"radioGroup\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[{\"label\":\"Long press\",\"value\":\"0\"},{\"label\":\"Double press\",\"value\":\"1\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8153,"Group":{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Call","Json":"{\"name\":\"Call\",\"default\":\"\",\"description\":\"Call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle Call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":5}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8154,"Group":{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Name","Json":"{\"name\":\"Name\",\"default\":\"\",\"description\":\"Contact Name\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":8,\"helpText\":\"Insert Contact Name\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8160,"Group":{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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 No Activity","Json":"{\"name\":\"Enable Disable No Activity\",\"default\":\"\",\"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":"false","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":8160,\"Group\":{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"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\\\":\\\"false\\\",\\\"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":1696371636}],"LanguageId":null,"Tags":[{"Id":1727,"Name":"noActivityActivate","BackendAction":"activateNoActivity","Value":""}]},{"Id":8159,"Group":{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"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\":8159,\"Group\":{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"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":1696371709}],"LanguageId":null,"Tags":[{"Id":1728,"Name":"noActivityInterval","BackendAction":"noActivityInterval","Value":""}]},{"Id":8129,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Charging","Json":"{\"name\":\"Charging\",\"default\":\"\",\"description\":\" Your alarm is charging\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":20}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8208,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call Disconnected","Json":"{\"name\":\"Call Disconnected\",\"default\":\"\",\"description\":\"Call disconnected!\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":17}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8198,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Base Location","Json":"{\"name\":\"Base Location\",\"default\":\"\",\"description\":\"Charging base location set\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8193,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call Hang","Json":"{\"name\":\"Call Hang\",\"default\":\"\",\"description\":\"Call hang up!\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":19}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8174,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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\":\"Now time %s.\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8165,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"BLE","Json":"{\"name\":\"BLE\",\"default\":\"\",\"description\":\"BLE connected\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":6}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8164,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call 3","Json":"{\"name\":\"Call 3\",\"default\":\"\",\"description\":\"Call 3\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":9}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8163,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Alarm Cancel","Json":"{\"name\":\"Alarm Cancel\",\"default\":\"\",\"description\":\"Alarm cancel\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8162,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Find","Json":"{\"name\":\"Find\",\"default\":\"\",\"description\":\"Find me\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":23}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8161,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call Error","Json":"{\"name\":\"Call Error\",\"default\":\"\",\"description\":\"Call error\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":18}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8142,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call 8","Json":"{\"name\":\"Call 8\",\"default\":\"\",\"description\":\"Call 8\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":14}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8141,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Beep","Json":"{\"name\":\"Beep\",\"default\":\"false\",\"description\":\"Beep\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":5}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8140,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Tilt Cancel","Json":"{\"name\":\"Tilt Cancel\",\"default\":\"true\",\"description\":\"Tilt alarm cancelled!\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8139,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Alarm Complete","Json":"{\"name\":\"Alarm Complete\",\"default\":\"\",\"description\":\"Alarm complete\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8138,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Activity","Json":"{\"name\":\"Activity\",\"default\":\"\",\"description\":\"Activity reminder!\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8137,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Tilt","Json":"{\"name\":\"Tilt\",\"default\":\"\",\"description\":\"Tilt alert\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8136,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Motion","Json":"{\"name\":\"Motion\",\"default\":\"\",\"description\":\"Motion alarm\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":24}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8135,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"No Motion","Json":"{\"name\":\"No Motion\",\"default\":\"\",\"description\":\"No motion alarm\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":25}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8134,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Click","Json":"{\"name\":\"Click\",\"default\":\"\",\"description\":\"Click SOS to stop call sequence!\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":21}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8133,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"SOS","Json":"{\"name\":\"SOS\",\"default\":\"\",\"description\":\"SOS alarm\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":26}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8132,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Fall","Json":"{\"name\":\"Fall\",\"default\":\"\",\"description\":\"Fall down alarm\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":22}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8131,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call 10","Json":"{\"name\":\"Call 10\",\"default\":\"\",\"description\":\"Call 10\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":16}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8130,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call 9","Json":"{\"name\":\"Call 9\",\"default\":\"\",\"description\":\"Call 9\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":15}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8128,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call 7","Json":"{\"name\":\"Call 7\",\"default\":\"\",\"description\":\"Call 7\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":13}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8127,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call 6","Json":"{\"name\":\"Call 6\",\"default\":\"\",\"description\":\"Call 6\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":12}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8126,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call 5","Json":"{\"name\":\"Call 5\",\"default\":\"\",\"description\":\"Call 5\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":11}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8125,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call 4","Json":"{\"name\":\"Call 4\",\"default\":\"\",\"description\":\"Call 4\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":10}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8123,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call 2","Json":"{\"name\":\"Call 2\",\"default\":\"\",\"description\":\"Call 2\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":8}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8122,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call 1","Json":"{\"name\":\"Call 1\",\"default\":\"\",\"description\":\"Call 1\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":7}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8121,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Battery","Json":"{\"name\":\"Battery\",\"default\":\"\",\"description\":\"Battery low\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8199,"Group":{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"OTA Update","Json":"{\"name\":\"OTA Update\",\"default\":\"\",\"description\":\"Performs an OTA update\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Sends command to perform OTA update\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":8199,\"Group\":{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"OTA Update\",\"Json\":\"{\\\"name\\\":\\\"OTA Update\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Performs an OTA update\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Sends command to perform OTA update\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1717658921},{"Type":0,"NewValue":"{\"Id\":8199,\"Group\":{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"OTA Update\",\"Json\":\"{\\\"name\\\":\\\"OTA Update\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Performs an OTA update\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Sends command to perform OTA update\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":5009,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.8\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\nvar value = 'http://35.180.127.121:5800/fi_ota';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1717658930}],"LanguageId":null,"Tags":[]},{"Id":8189,"Group":{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"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\":\"Ask the device for firmware version and stored in Firmware Version\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8192,"Group":{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Last Update","Json":"{\"name\":\"Last Update\",\"default\":\"\",\"description\":\"Last Update Time UTC\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The UTC time of the last update in YYYYMMDDHHmmSS format.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8196,"Group":{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Firmware Version","Json":"{\"name\":\"Firmware Version\",\"default\":\"\",\"description\":\"Device Firmware Version\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"This will be reported by the device and stored here for use in updating the device's firmware version.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8190,"Group":{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Device Reboot","Json":"{\"name\":\"Device Reboot\",\"default\":\"\",\"description\":\"Device Reboot\",\"type\":\"button\",\"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":8191,"Group":{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Device Version","Json":"{\"name\":\"Device Version\",\"default\":\"\",\"description\":\"Device Version\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Select Device Version\",\"options\":[{\"label\":\"Rio\",\"value\":\"1\"},{\"label\":\"OystaCare Watch\",\"value\":\"2\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8195,"Group":{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"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\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8197,"Group":{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Mode","Json":"{\"name\":\"Mode\",\"default\":\"\",\"description\":\"Different modes for communication\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Select Communicate behaviour of the Rio. Cycle = C; Heartbeat = H; Lazy Cycle = LC. Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\",\"options\":[{\"value\":\"01\",\"label\":\"M1: No Cycles until alarm is triggered\"},{\"value\":\"02\",\"label\":\"M2: Always stay online, Location only on movement\"},{\"value\":\"03\",\"label\":\"M3: Always online, Location only on movement, no lazy cycle\"},{\"value\":\"04\",\"label\":\"M4: Only lazy cycles; Location only on lazy cycle.\"},{\"value\":\"05\",\"label\":\"M5: Only lazy cycles, GSM/GPRS/Location off between cycles\"},{\"value\":\"06\",\"label\":\"M6: (default) Sends data on regular cycles, Location only on movement\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":8197,\"Group\":{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Mode\",\"Json\":\"{\\\"name\\\":\\\"Mode\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Different modes for communication\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select Communicate behaviour of the Rio. Cycle = C; Heartbeat = H; Lazy Cycle = LC. Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\\\",\\\"options\\\":[{\\\"value\\\":\\\"01\\\",\\\"label\\\":\\\"M1: No Cycles until alarm is triggered\\\"},{\\\"value\\\":\\\"02\\\",\\\"label\\\":\\\"M2: Always stay online, Location only on movement\\\"},{\\\"value\\\":\\\"03\\\",\\\"label\\\":\\\"M3: Always online, Location only on movement, no lazy cycle\\\"},{\\\"value\\\":\\\"04\\\",\\\"label\\\":\\\"M4: Only lazy cycles; Location only on lazy cycle.\\\"},{\\\"value\\\":\\\"05\\\",\\\"label\\\":\\\"M5: Only lazy cycles, GSM/GPRS/Location off between cycles\\\"},{\\\"value\\\":\\\"06\\\",\\\"label\\\":\\\"M6: (default) Sends data on regular cycles, Location only on movement\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1734001576},{"Type":0,"NewValue":"{\"Id\":8197,\"Group\":{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Mode\",\"Json\":\"{\\\"name\\\":\\\"Mode\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Different modes for communication\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select Communicate behaviour of the Rio. Cycle = C; Heartbeat = H; Lazy Cycle = LC. Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\\\",\\\"options\\\":[{\\\"value\\\":\\\"01\\\",\\\"label\\\":\\\"M1: No Cycles until alarm is triggered\\\"},{\\\"value\\\":\\\"02\\\",\\\"label\\\":\\\"M2: Always stay online, Location only on movement\\\"},{\\\"value\\\":\\\"03\\\",\\\"label\\\":\\\"M3: Always online, Location only on movement, no lazy cycle\\\"},{\\\"value\\\":\\\"04\\\",\\\"label\\\":\\\"M4: Only lazy cycles; Location only on lazy cycle.\\\"},{\\\"value\\\":\\\"05\\\",\\\"label\\\":\\\"M5: Only lazy cycles, GSM/GPRS/Location off between cycles\\\"},{\\\"value\\\":\\\"06\\\",\\\"label\\\":\\\"M6: (default) Sends data on regular cycles, Location only on movement\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":3327,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"3.0\",\"FirmwareVersion\":\"V04b.8601.2406.1.0.16.4411.2406.25\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Cycle\",\"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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":3},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1734001582}],"LanguageId":null,"Tags":[]},{"Id":8203,"Group":{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Time Interval","Json":"{\"name\":\"Time Interval\",\"default\":\"\",\"description\":\"Time Interval\",\"type\":\"number\",\"suffix\":\"minutes\",\"prefix\":null,\"min\":10,\"max\":10080,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8187,"Group":{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Warning Time","Json":"{\"name\":\"Warning Time\",\"default\":\"\",\"description\":\"Warning Time\",\"type\":\"number\",\"suffix\":\"minutes\",\"prefix\":\"\",\"min\":1,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The time interval for the warning timer to run\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":8187,\"Group\":{\"Id\":5028,\"Name\":\"Welfare Check\",\"Json\":{\"description\":\"Welfare Check (Only Rio)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Warning Time\",\"Json\":\"{\\\"name\\\":\\\"Warning Time\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Warning Time\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"minutes\\\",\\\"prefix\\\":\\\"\\\",\\\"min\\\":5,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The time interval for the warning timer to run\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1726749319},{"Type":1,"NewValue":"{\"Id\":8187,\"Group\":{\"Id\":5028,\"Name\":\"Welfare Check\",\"Json\":{\"description\":\"Welfare Check (Only Rio)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Warning Time\",\"Json\":\"{\\\"name\\\":\\\"Warning Time\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Warning Time\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"minutes\\\",\\\"prefix\\\":\\\"\\\",\\\"min\\\":2,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The time interval for the warning timer to run\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1726821973}],"LanguageId":null,"Tags":[]},{"Id":8124,"Group":{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Dial Warning Time","Json":"{\"name\":\"Dial Warning Time\",\"default\":\"true\",\"description\":\"Toggle Dial Warning Time\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Turn on Dial on warning time\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":8124,\"Group\":{\"Id\":5028,\"Name\":\"Welfare Check\",\"Json\":{\"description\":\"Welfare Check (Only Rio)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Dial Warning Time\",\"Json\":\"{\\\"name\\\":\\\"Dial Warning Time\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Toggle Dial Warning Time\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Turn on Dial on warning time must be <=2 minutes before the warning time \\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1726746505},{"Type":1,"NewValue":"{\"Id\":8124,\"Group\":{\"Id\":5028,\"Name\":\"Welfare Check\",\"Json\":{\"description\":\"Welfare Check (Only Rio)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Dial Warning Time\",\"Json\":\"{\\\"name\\\":\\\"Dial Warning Time\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Toggle Dial Warning Time\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Turn on Dial on warning time must be <=2 minutes before the check time \\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1726746755}],"LanguageId":null,"Tags":[]},{"Id":8144,"Group":{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Check Time","Json":"{\"name\":\"Check Time\",\"default\":\"\",\"description\":\"Check Time\",\"type\":\"number\",\"suffix\":\"minutes\",\"prefix\":null,\"min\":10,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The time interval for the amber timer to run\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8143,"Group":{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Enable Disable Welfare Check","Json":"{\"name\":\"Enable Disable Welfare Check\",\"default\":\"true\",\"description\":\"Toggle Welfare Check\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Turn on Amber alert.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8168,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Beep","Json":"{\"name\":\"Beep\",\"default\":\"true\",\"description\":\"Enable Beep\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8166,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"GPS Locate","Json":"{\"name\":\"GPS Locate\",\"default\":\"true\",\"description\":\"GPS locating\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8188,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"BLE Locating","Json":"{\"name\":\"BLE Locating\",\"default\":\"true\",\"description\":\"Enable BLE Locating\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Disable if the user is not using beacons or other ble locating technologies. Enabling will increase the time it takes to make a call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8194,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"BLE Stay Connected","Json":"{\"name\":\"BLE Stay Connected\",\"default\":\"true\",\"description\":\"BLE Persistent connection\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8200,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"SOS Call Voice","Json":"{\"name\":\"SOS Call Voice\",\"default\":\"true\",\"description\":\"SOS 2-way Voice\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8201,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"BLE Always ON","Json":"{\"name\":\"BLE Always ON\",\"default\":\"true\",\"description\":\"BLE Always ON\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8202,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Side Call Speaker","Json":"{\"name\":\"Side Call Speaker\",\"default\":\"true\",\"description\":\"Side Call Speaker\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8205,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"WiFi","Json":"{\"name\":\"WiFi\",\"default\":\"false\",\"description\":\"Enable Wifi locating\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enables/Disables the wifi locating function\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8206,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Beacon","Json":"{\"name\":\"Beacon\",\"default\":\"true\",\"description\":\"Enable Location by Beacon\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable/Disable Beacon Location\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8207,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Stop Call Sequence","Json":"{\"name\":\"Stop Call Sequence\",\"default\":\"true\",\"description\":\"Enable Stop Call Sequence\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enables/Disables Stop Call Sequence\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8186,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"SOS Call Speaker","Json":"{\"name\":\"SOS Call Speaker\",\"default\":\"true\",\"description\":\"Enable SOS call speaker\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8185,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Cell Tower Locating","Json":"{\"name\":\"Cell Tower Locating\",\"default\":\"true\",\"description\":\"LBS locating\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Allow the device to track location by cell tower\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8172,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"AlertTCPFast","Json":"{\"name\":\"AlertTCPFast\",\"default\":\"true\",\"description\":\"Send Data before call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Sends the alarm data before the call. WARNING: When enabled, where GPS signal is poor, the location may not be sent with the alarm to the ARC.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8171,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"AGPS","Json":"{\"name\":\"AGPS\",\"default\":\"false\",\"description\":\"AGPS\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Assisted GPS\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8170,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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 Update","Json":"{\"name\":\"Auto Update\",\"default\":\"true\",\"description\":\"Enable FOTA function\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Not Available\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8169,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"LED","Json":"{\"name\":\"LED\",\"default\":\"false\",\"description\":\"Enable status LEDs\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enables/Disables the signal, GPS, Battery LEDs on the front of the device\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8167,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Vibration","Json":"{\"name\":\"Vibration\",\"default\":\"true\",\"description\":\"Enable Vibrate\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8173,"Group":{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Power Off","Json":"{\"name\":\"Power Off\",\"default\":\"\",\"description\":\"Power Off\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8175,"Group":{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Set APN","Json":"{ \"name\": \"Set APN\", \"default\": \"\", \"description\": \"Configure APN\", \"type\": \"apn\", \"suffix\": null, \"prefix\": null, \"min\": null, \"max\": null, \"futureOnly\": null, \"integerOnly\": false, \"isReadOnly\": false, \"isHidden\": null, \"minLength\": null, \"maxLength\": null, \"helpText\": \"ADMIN USE ONLY. Configures which APN is used for the given device. default: Stream.\", \"options\": [ { \"value\": \"stream.co.uk,streamip,streamip\", \"label\": \"Stream\" }, { \"value\": \"tec.cslm2m.com,,\", \"label\": \"CSL (Sweden) \" }, { \"value\": \"data.myeirmobile.ie,,\", \"label\": \"EIR Ire\" }, { \"value\": \"Internet,web,web\", \"label\": \"Vodafone internet - Internet\" }, { \"value\": \"orangeapn,orangeusername,orangepass\", \"label\": \"Orange [Romania]\" }, { \"value\": \"ac.vodafone.es,vodafone,vodafone\", \"label\": \"ac.vodafone.es []\" }, { \"value\": \"geminit2.m2m,,\", \"label\": \"CSL (gemenit2) [UK]\" }, { \"value\": \"geminit2.m2m,,\", \"label\": \"CSL (geminit2) [UK]\" }, { \"value\": \"m2m.vodafone.es,Vodafone,Vodafone\", \"label\": \"m2m.vodafone.es [Spain]\" }, { \"value\": \" ,,\", \"label\": \"None\" }, { \"value\": \"airtelwap.es,wap@wap,wap\", \"label\": \"Vodafone 4G [spain]\" }, { \"value\": \"inet.es,,\", \"label\": \"OIGAA [Spain]\" }, { \"value\": \"inetd.vfes,,\", \"label\": \"Spainiot [Spain]\" }, { \"value\": \"movistar.es,movistar,movistar\", \"label\": \"Movistar Spain [Spain]\" }, { \"value\": \"wlapn.com,deimos,deimos\", \"label\": \"DEIMOS [spain]\" }, { \"value\": \"movistar.es,MOVISTAR,MOVISTAR\", \"label\": \"Movistar\" }, { \"value\": \"airtelnet.es,0,0\", \"label\": \"VodafoneAirtel\" }, { \"value\": \"iot.cslm2m.com,,\", \"label\": \"CSL (IoT) [UK]\" }, { \"value\": \"internetm2m,,\", \"label\": \"Portugal Telecom [Portugal]\" }, { \"value\": \"eapn1.net,web,web\", \"label\": \"Mobius [uk]\" }, { \"value\": \"stream.co.uk,default,void \", \"label\": \"Static Stream []\" }, { \"value\": \"mobile.o2.co.uk,vertigo,password\", \"label\": \"G4S UK O2 [UK]\" }, { \"value\": \"wap.vodafone.co.uk,wap,wap\", \"label\": \"Vodafone WAP [UK]\" }, { \"value\": \"autoselect,,\", \"label\": \"autoselect \" }, { \"value\": \"payandgo.o2.co.uk,payandgo,payandgo\", \"label\": \"O2 (pre-pay) [UK]\" }, { \"value\": \"isp.vodafone.ie,vodafone,vodafone\", \"label\": \"Vodafone (contract) [Ireland]\" }, { \"value\": \"internet,gprs,gprs\", \"label\": \"O2 IRE [Ireland]\" }, { \"value\": \"iot.cslm2m.com,0,0\", \"label\": \"CSL (iot.csl)\" }, { \"value\": \"hs.vodafone.ie ,vodafone,vodafone\", \"label\": \"Vodafone IRE + username and password [Ireland]\" }, { \"value\": \"lpwa.vodafone.iot,,\", \"label\": \"VODAFONE_lpwa \\t [spain]\" }, { \"value\": \"ESEYE1,USER,PASS\", \"label\": \"ESEYE []\" } ], \"toTranslate\": [ \"name\", \"description\", \"helpText\", \"label\" ]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":8175,\"Group\":{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Set APN\",\"Json\":\"{\\\"name\\\":\\\"Set APN\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Configure APN\\\",\\\"type\\\":\\\"apn\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"ADMIN USE ONLY. Configures which APN is used for the given device. default: Stream.\\\",\\\"options\\\":[{\\\"value\\\":\\\"stream.co.uk,streamip,streamip\\\",\\\"label\\\":\\\"Stream\\\"},{\\\"value\\\":\\\"tec.cslm2m.com,,\\\",\\\"label\\\":\\\"CSL (Sweden) \\\"},{\\\"value\\\":\\\"data.myeirmobile.ie,,\\\",\\\"label\\\":\\\"EIR Ire\\\"},{\\\"value\\\":\\\"Internet,web,web\\\",\\\"label\\\":\\\"Vodafone internet - Internet\\\"},{\\\"value\\\":\\\"orangeapn,orangeusername,orangepass\\\",\\\"label\\\":\\\"Orange [Romania]\\\"},{\\\"value\\\":\\\"ac.vodafone.es,vodafone,vodafone\\\",\\\"label\\\":\\\"ac.vodafone.es []\\\"},{\\\"value\\\":\\\"geminit2.m2m,,\\\",\\\"label\\\":\\\"CSL (gemenit2) [UK]\\\"},{\\\"value\\\":\\\"geminit2.m2m,,\\\",\\\"label\\\":\\\"CSL (geminit2) [UK]\\\"},{\\\"value\\\":\\\"m2m.vodafone.es,Vodafone,Vodafone\\\",\\\"label\\\":\\\"m2m.vodafone.es [Spain]\\\"},{\\\"value\\\":\\\" ,,\\\",\\\"label\\\":\\\"None\\\"},{\\\"value\\\":\\\"airtelwap.es,wap@wap,wap\\\",\\\"label\\\":\\\"Vodafone 4G [spain]\\\"},{\\\"value\\\":\\\"inet.es,,\\\",\\\"label\\\":\\\"OIGAA [Spain]\\\"},{\\\"value\\\":\\\"inetd.vfes,,\\\",\\\"label\\\":\\\"Spainiot [Spain]\\\"},{\\\"value\\\":\\\"movistar.es,movistar,movistar\\\",\\\"label\\\":\\\"Movistar Spain [Spain]\\\"},{\\\"value\\\":\\\"wlapn.com,deimos,deimos\\\",\\\"label\\\":\\\"DEIMOS [spain]\\\"},{\\\"value\\\":\\\"movistar.es,MOVISTAR,MOVISTAR\\\",\\\"label\\\":\\\"Movistar\\\"},{\\\"value\\\":\\\"airtelnet.es,0,0\\\",\\\"label\\\":\\\"VodafoneAirtel\\\"},{\\\"value\\\":\\\"iot.cslm2m.com,,\\\",\\\"label\\\":\\\"CSL (IoT) [UK]\\\"},{\\\"value\\\":\\\"internetm2m,,\\\",\\\"label\\\":\\\"Portugal Telecom [Portugal]\\\"},{\\\"value\\\":\\\"eapn1.net,web,web\\\",\\\"label\\\":\\\"Mobius [uk]\\\"},{\\\"value\\\":\\\"stream.co.uk,default,void \\\",\\\"label\\\":\\\"Static Stream []\\\"},{\\\"value\\\":\\\"mobile.o2.co.uk,vertigo,password\\\",\\\"label\\\":\\\"G4S UK O2 [UK]\\\"},{\\\"value\\\":\\\"wap.vodafone.co.uk,wap,wap\\\",\\\"label\\\":\\\"Vodafone WAP [UK]\\\"},{\\\"value\\\":\\\"autoselect,,\\\",\\\"label\\\":\\\"autoselect \\\"},{\\\"value\\\":\\\"payandgo.o2.co.uk,payandgo,payandgo\\\",\\\"label\\\":\\\"O2 (pre-pay) [UK]\\\"},{\\\"value\\\":\\\"isp.vodafone.ie,vodafone,vodafone\\\",\\\"label\\\":\\\"Vodafone (contract) [Ireland]\\\"},{\\\"value\\\":\\\"internet,gprs,gprs\\\",\\\"label\\\":\\\"O2 IRE [Ireland]\\\"},{\\\"value\\\":\\\"iot.cslm2m.com,0,0\\\",\\\"label\\\":\\\"CSL (iot.csl)\\\"},{\\\"value\\\":\\\"hs.vodafone.ie ,vodafone,vodafone\\\",\\\"label\\\":\\\"Vodafone IRE + username and password [Ireland]\\\"},{\\\"value\\\":\\\"lpwa.vodafone.iot,,\\\",\\\"label\\\":\\\"VODAFONE_lpwa \\\\t [spain]\\\"},{\\\"value\\\":\\\"ESEYE1,USER,PASS\\\",\\\"label\\\":\\\"ESEYE []\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1700220928}],"LanguageId":null,"Tags":[]},{"Id":8176,"Group":{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Request Location","Json":"{\"name\":\"Request Location\",\"default\":\"\",\"description\":\"Real Time Locate\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Request the current location of the device\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":8176,\"Group\":{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Location\",\"Json\":\"{\\\"name\\\":\\\"Request Location\\\",\\\"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\\\":\\\"Request the current location of the device\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1733323424}],"LanguageId":null,"Tags":[]},{"Id":8177,"Group":{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Delete Records","Json":"{\"name\":\"Delete Records\",\"default\":\"\",\"description\":\"Delete buffered messages\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8178,"Group":{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Enable Disable SMS Password","Json":"{\"name\":\"Enable Disable SMS Password\",\"default\":\"true\",\"description\":\"Enable Disable SMS Password\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8179,"Group":{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"SMS Password","Json":"{\"name\":\"SMS Password\",\"default\":\"\",\"description\":null,\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":6,\"helpText\":\"\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8180,"Group":{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Set Server","Json":"{\"name\":\"Set Server\",\"default\":\"\",\"description\":\"Configure Primary Server\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":false,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"ADMIN USE ONLY. This sets the location to which a device communicates\",\"options\":[{\"value\":\"52.174.17.77,5678\",\"label\":\"Acceptance Receiver\"},{\"value\":\"52.232.85.255,5678\",\"label\":\"Production Receiver\"},{\"value\":\"52.232.85.255,7117\",\"label\":\"Old Sockets Production\"},{\"value\":\",\",\"label\":\"None\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":8180,\"Group\":{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Set Server\",\"Json\":\"{\\\"name\\\":\\\"Set Server\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Configure Primary Server\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"ADMIN USE ONLY. This sets the location to which a device communicates\\\",\\\"options\\\":[{\\\"value\\\":\\\"52.174.17.77,5678\\\",\\\"label\\\":\\\"Acceptance Receiver\\\"},{\\\"value\\\":\\\"52.232.85.255,5678\\\",\\\"label\\\":\\\"Production Receiver\\\"},{\\\"value\\\":\\\"52.232.85.255,7117\\\",\\\"label\\\":\\\"Old Sockets Production\\\"},{\\\"value\\\":\\\",\\\",\\\"label\\\":\\\"None\\\"},{\\\"label\\\":\\\"Staging Protocol Import\\\",\\\"value\\\":\\\"52.174.17.77,5778\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1728284696}],"LanguageId":null,"Tags":[]},{"Id":8182,"Group":{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Interval","Json":"{\"name\":\"Interval\",\"default\":\"\",\"description\":\"Interval\",\"type\":\"number\",\"suffix\":\"minutes\",\"prefix\":null,\"min\":1,\"max\":10,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The interval at which the Rio will transmit location data after an SOS is triggered.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8181,"Group":{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Duration","Json":"{\"name\":\"Duration\",\"default\":\"\",\"description\":\"Duration\",\"type\":\"number\",\"suffix\":\"minutes\",\"prefix\":null,\"min\":1,\"max\":30,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"How long the continuous locate will last\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8184,"Group":{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Lazy Cycle Interval","Json":"{\"name\":\"Lazy Cycle Interval\",\"default\":\"\",\"description\":\"Lazy Cycle Frequency\",\"type\":\"number\",\"suffix\":\"minutes\",\"prefix\":null,\"min\":5,\"max\":1440,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"When at rest the Rio will reduce the interval at which it reports to IntelliCare to the chosen value. \",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8183,"Group":{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Heartbeat Interval","Json":"{\"name\":\"Heartbeat Interval\",\"default\":\"\",\"description\":\"Heartbeat Frequency\",\"type\":\"number\",\"suffix\":\"minutes\",\"prefix\":null,\"min\":1,\"max\":5,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The Rio will send \\\"heartbeats\\\" to IntelliCare to maintain the network connection\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8120,"Group":{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Cycle Interval","Json":"{\"name\":\"Cycle Interval\",\"default\":\"\",\"description\":\"Cycle Interval\",\"type\":\"number\",\"suffix\":\"minutes\",\"prefix\":null,\"min\":1,\"max\":1440,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The interval the Rio will send regular updates to IntelliCare\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":8120,\"Group\":{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Cycle Interval\",\"Json\":\"{\\\"name\\\":\\\"Cycle Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Cycle Interval\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"minutes\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The interval the Rio will send regular updates to IntelliCare\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1696074130},{"Type":1,"NewValue":"{\"Id\":8120,\"Group\":{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Cycle Interval\",\"Json\":\"{\\\"name\\\":\\\"Cycle Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Cycle Interval\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"minutes\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The interval the Rio will send regular updates to IntelliCare\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1734001517},{"Type":0,"NewValue":"{\"Id\":8120,\"Group\":{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Cycle Interval\",\"Json\":\"{\\\"name\\\":\\\"Cycle Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Cycle Interval\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"minutes\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The interval the Rio will send regular updates to IntelliCare\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":3317,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"3.0\",\"FirmwareVersion\":\"V04b.8601.2406.1.0.16.4411.2406.25\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Working Mode\",\"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 localTesting = false;\\r\\nif (localTesting) var params = {\\r\\n 'CycleInterval': {\\r\\n 'CycleInterval': 10,\\r\\n 'LazyCycleInterval': 60\\r\\n },\\r\\n 'WorkingMode': {\\r\\n 'Mode': '06'\\r\\n }\\r\\n};\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Select Communicate behaviour of the Rio.\\r\\n// Cycle = C; Heartbeat = H; Lazy Cycle = LC. \\r\\n//Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\\r\\n// load parameters Cycle interval and Lazy cycle interval\\r\\nif (params.CycleInterval.CycleInterval) {\\r\\n var cycleInterval = parseInt(params.CycleInterval.CycleInterval) * 60;\\r\\n} else var cycleInterval = 600;\\r\\nif (params.CycleInterval.LazyCycleInterval) {\\r\\n var lazyCycleInterval = parseInt(params.CycleInterval.LazyCycleInterval) * 60;\\r\\n} else var lazyCycleInterval = 3600;\\r\\n// Check selected working mode\\r\\nif (params.WorkingMode.Mode) {\\r\\n var mode = params.WorkingMode.Mode;\\r\\n} else {\\r\\n var mode = '06';\\r\\n} // default mode 6\\r\\n// improve command to add both GPRS and SMS comunication\\r\\nswitch (mode) {\\r\\n case '02':\\r\\n case '06':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M,' + lazyCycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '03':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '04':\\r\\n case '05': // add time interval to the command\\r\\n if (cycleInterval) {\\r\\n var value = parseInt(cycleInterval);\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M';\\r\\n } else {\\r\\n var value = 60 * 60; // default value 60*60 seconds\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + 60 + 'M';\\r\\n }\\r\\n break;\\r\\n default:\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = '';\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar keyLength = '05';\\r\\nvar key = '0A';\\r\\nvar messageBody = command + keyLength + key + value + mode;\\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' + '0700' + 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 = 'mode' + mode.substring(1) + valueSMS;\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\ndebug(data);\\r\\ndebug(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 debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":2,\"Order\":2},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1734001523}],"LanguageId":null,"Tags":[{"Id":1714,"Name":"cycleInterval","BackendAction":"cycleInterval","Value":""}]},{"Id":8209,"Group":{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Language","Json":"{\"name\":\"Language\",\"default\":\"\",\"description\":\"Change to local language\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Choose Rio language\",\"options\":[{\"label\":\"English\",\"value\":\"en-US\"},{\"label\":\"Spanish\",\"value\":\"es-ES\"},{\"label\":\"German\",\"value\":\"de-DE\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":8209,\"Group\":{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Language\",\"Json\":\"{\\\"name\\\":\\\"Language\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Change to local language\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Choose Rio language\\\",\\\"options\\\":[{\\\"value\\\":\\\"en-US\\\",\\\"label\\\":\\\"English\\\"},{\\\"value\\\":\\\"es-ES\\\",\\\"label\\\":\\\"Spanish\\\"},{\\\"value\\\":\\\"de-DE\\\",\\\"label\\\":\\\"German\\\"},{\\\"label\\\":\\\"Portuguese\\\",\\\"value\\\":\\\"pt-PT\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1729253638}],"LanguageId":null,"Tags":[]},{"Id":8238,"Group":{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Beacon Name 10","Json":"{\"name\":\"Beacon Name 10\",\"default\":\"\",\"description\":\"Beacon Name 10\",\"type\":\"beacon\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8237,"Group":{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Enable Disable Beacon 10","Json":"{\"name\":\"Enable Disable Beacon 10\",\"default\":\"false\",\"description\":\"Beacon Name 10\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8226,"Group":{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Monday","Json":"{\"name\":\"Monday\",\"default\":\"true\",\"description\":\"Monday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8232,"Group":{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Saturday","Json":"{\"name\":\"Saturday\",\"default\":\"true\",\"description\":\"Sautrday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":8}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8231,"Group":{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Friday","Json":"{\"name\":\"Friday\",\"default\":\"true\",\"description\":\"Friday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":7}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8230,"Group":{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Sunday","Json":"{\"name\":\"Sunday\",\"default\":\"true\",\"description\":\"Sunday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":9}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8229,"Group":{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Time","Json":"{\"name\":\"Time\",\"default\":\"\",\"description\":\"Time\",\"type\":\"time\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8228,"Group":{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Thursday","Json":"{\"name\":\"Thursday\",\"default\":\"true\",\"description\":\"Thursday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":6}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8227,"Group":{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Tuesday","Json":"{\"name\":\"Tuesday\",\"default\":\"true\",\"description\":\"Tuesday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8224,"Group":{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Duration","Json":"{\"name\":\"Duration\",\"default\":\"\",\"description\":\"Duration\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":1,\"max\":120,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8223,"Group":{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Wednesday","Json":"{\"name\":\"Wednesday\",\"default\":\"true\",\"description\":\"Wednesday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":5}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8220,"Group":{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Alarm Clock 2","Json":"{\"name\":\"Enable Disable Alarm Clock 2\",\"default\":\"true\",\"description\":\"Toggle Alarm Clock 2\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8215,"Group":{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Wednesday","Json":"{\"name\":\"Wednesday\",\"default\":\"true\",\"description\":\"Wednesday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":9}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8216,"Group":{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Tuesday","Json":"{\"name\":\"Tuesday\",\"default\":\"true\",\"description\":\"Tuesday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":8}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8217,"Group":{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Time","Json":"{\"name\":\"Time\",\"default\":\"\",\"description\":\"Time\",\"type\":\"time\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8221,"Group":{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Alarm Clock 3","Json":"{\"name\":\"Enable Disable Alarm Clock 3\",\"default\":\"true\",\"description\":\"Toggle Alarm Clock 3\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8222,"Group":{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Sunday","Json":"{\"name\":\"Sunday\",\"default\":\"true\",\"description\":\"Sunday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":6}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8219,"Group":{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Monday","Json":"{\"name\":\"Monday\",\"default\":\"true\",\"description\":\"Monday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8233,"Group":{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Friday","Json":"{\"name\":\"Friday\",\"default\":\"true\",\"description\":\"Friday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8214,"Group":{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Saturday","Json":"{\"name\":\"Saturday\",\"default\":\"true\",\"description\":\"Saturday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":5}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8210,"Group":{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Thursday","Json":"{\"name\":\"Thursday\",\"default\":\"true\",\"description\":\"Thursday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":7}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8213,"Group":{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Duration","Json":"{\"name\":\"Duration\",\"default\":\"\",\"description\":\"Duration\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":1,\"max\":120,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8258,"Group":{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Thursday","Json":"{\"name\":\"Thursday\",\"default\":\"true\",\"description\":\"Thursday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":6}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8256,"Group":{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Tuesday","Json":"{\"name\":\"Tuesday\",\"default\":\"true\",\"description\":\"Tuesday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8262,"Group":{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Alarm Clock 1","Json":"{\"name\":\"Enable Disable Alarm Clock 1\",\"default\":\"true\",\"description\":\"Toggle Alarm Clock 1\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8261,"Group":{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Saturday","Json":"{\"name\":\"Saturday\",\"default\":\"true\",\"description\":\"Saturday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":8}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8259,"Group":{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Friday","Json":"{\"name\":\"Friday\",\"default\":\"true\",\"description\":\"Friday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":7}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8257,"Group":{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Wednesday","Json":"{\"name\":\"Wednesday\",\"default\":\"true\",\"description\":\"Wednesday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":5}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8268,"Group":{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Time","Json":"{\"name\":\"Time\",\"default\":\"\",\"description\":\"Time\",\"type\":\"time\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8265,"Group":{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Duration","Json":"{\"name\":\"Duration\",\"default\":\"\",\"description\":\"Duration\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":1,\"max\":120,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8264,"Group":{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Monday","Json":"{\"name\":\"Monday\",\"default\":\"true\",\"description\":\"Monday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8263,"Group":{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Sunday","Json":"{\"name\":\"Sunday\",\"default\":\"true\",\"description\":\"Sunday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":9}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8269,"Group":{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Enable Disable Beacon 1","Json":"{\"name\":\"Enable Disable Beacon 1\",\"default\":\"\",\"description\":\"Enable Disable Beacon 1\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8266,"Group":{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Beacon Name 1","Json":"{\"name\":\"Beacon Name 1\",\"default\":\"\",\"description\":\"Beacon Name 1\",\"type\":\"beacon\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8267,"Group":{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Enable Disable Beacon 2","Json":"{\"name\":\"Enable Disable Beacon 2\",\"default\":\"\",\"description\":\"Enable Disable Beacon 2\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8253,"Group":{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Beacon Name 2","Json":"{\"name\":\"Beacon Name 2\",\"default\":\"\",\"description\":\"Beacon Name 2\",\"type\":\"beacon\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8251,"Group":{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Beacon Name 3","Json":"{\"name\":\"Beacon Name 3\",\"default\":\"\",\"description\":\"Beacon Name 3\",\"type\":\"beacon\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8252,"Group":{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Enable Disable Beacon 3","Json":"{\"name\":\"Enable Disable Beacon 3\",\"default\":\"\",\"description\":\"Enable Disable Beacon 3\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8249,"Group":{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Beacon Name 4","Json":"{\"name\":\"Beacon Name 4\",\"default\":\"\",\"description\":\"Beacon Name 4\",\"type\":\"beacon\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8250,"Group":{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Enable Disable Beacon 4","Json":"{\"name\":\"Enable Disable Beacon 4\",\"default\":\"\",\"description\":\"Enable Disable Beacon 4\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8248,"Group":{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Beacon Name 5","Json":"{\"name\":\"Beacon Name 5\",\"default\":\"\",\"description\":\"Beacon Name 5\",\"type\":\"beacon\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8247,"Group":{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Enable Disable Beacon 5","Json":"{\"name\":\"Enable Disable Beacon 5\",\"default\":\"\",\"description\":\"Enable Disable Beacon 5\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8244,"Group":{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Beacon Name 7","Json":"{\"name\":\"Beacon Name 7\",\"default\":\"\",\"description\":\"Beacon Name 7\",\"type\":\"beacon\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8243,"Group":{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Enable Disable Beacon 7","Json":"{\"name\":\"Enable Disable Beacon 7\",\"default\":\"\",\"description\":\"Enable Disable Beacon 7\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8242,"Group":{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Beacon Name 8","Json":"{\"name\":\"Beacon Name 8\",\"default\":\"\",\"description\":\"Beacon Name 8\",\"type\":\"beacon\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8241,"Group":{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Enable Disable Beacon 8","Json":"{\"name\":\"Enable Disable Beacon 8\",\"default\":\"\",\"description\":\"Enable Disable Beacon 8\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8239,"Group":{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Enable Disable Beacon 9","Json":"{\"name\":\"Enable Disable Beacon 9\",\"default\":\"false\",\"description\":\"Enable Disable Beacon 9\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8240,"Group":{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Beacon Name 9","Json":"{\"name\":\"Beacon Name 9\",\"default\":\"\",\"description\":\"Beacon Name 9\",\"type\":\"beacon\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8255,"Group":{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","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":"Monday","Json":"{\"name\":\"Monday\",\"default\":\"true\",\"description\":\"Monday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8260,"Group":{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","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":"Friday","Json":"{\"name\":\"Friday\",\"default\":\"true\",\"description\":\"Friday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":7}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8234,"Group":{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","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":"Thursday","Json":"{\"name\":\"Thursday\",\"default\":\"true\",\"description\":\"Thursday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":6}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8225,"Group":{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","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":"Wednesday","Json":"{\"name\":\"Wednesday\",\"default\":\"true\",\"description\":\"Wednesday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":5}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8218,"Group":{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","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":"Tuesday","Json":"{\"name\":\"Tuesday\",\"default\":\"true\",\"description\":\"Tuesday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8212,"Group":{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","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 Alarm Clock 4","Json":"{\"name\":\"Enable Disable Alarm Clock 4\",\"default\":\"true\",\"description\":\"Toggle Alarm Clock 4\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8211,"Group":{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","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":"Duration","Json":"{\"name\":\"Duration\",\"default\":\"\",\"description\":\"Duration\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":1,\"max\":120,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8235,"Group":{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","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\",\"type\":\"time\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8236,"Group":{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","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":"Saturday","Json":"{\"name\":\"Saturday\",\"default\":\"true\",\"description\":\"Saturday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":8}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8254,"Group":{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","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":"Sunday","Json":"{\"name\":\"Sunday\",\"default\":\"true\",\"description\":\"Sunday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":9}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8246,"Group":{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"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 Beacon 6","Json":"{\"name\":\"Enable Disable Beacon 6\",\"default\":\"false\",\"description\":\"Enable Disable Beacon 6\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8245,"Group":{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"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":"Beacon Name 6","Json":"{\"name\":\"Beacon Name 6\",\"default\":\"\",\"description\":\"Beacon Name 6\",\"type\":\"beacon\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8314,"Group":{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Dial","Json":"{\"name\":\"Dial\",\"default\":\"true\",\"description\":\"Dial\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"dial the number configured in the SOS settings\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8313,"Group":{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Fall Down Alert","Json":"{\"name\":\"Enable Disable Fall Down Alert\",\"default\":\"true\",\"description\":\"Toggle Fall alert\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"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":8270,"Group":{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Sensitivity","Json":"{\"name\":\"Sensitivity\",\"default\":\"\",\"description\":\"Sensitivity\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":1,\"max\":9,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"1-9 (9 high sensitivity/low trigger)\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8307,"Group":{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Time","Json":"{\"name\":\"Time\",\"default\":\"\",\"description\":\"Time in motion\",\"type\":\"number\",\"suffix\":\"seconds\",\"prefix\":null,\"min\":3,\"max\":600,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Time the VIP needs to be moving before the cool down period in order to trigger the movement alarm\\n\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8309,"Group":{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Dial","Json":"{\"name\":\"Dial\",\"default\":\"true\",\"description\":\"Dial\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"check to dial the configured number for SOS.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8310,"Group":{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Motion Alert","Json":"{\"name\":\"Enable Disable Motion Alert\",\"default\":\"true\",\"description\":\"Toggle Movement alert\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle the feature for raising an alarm on movement after a specified period\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8308,"Group":{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Cooldown","Json":"{\"name\":\"Cooldown\",\"default\":\"\",\"description\":\"Static duration\",\"type\":\"number\",\"suffix\":\"seconds\",\"prefix\":null,\"min\":60,\"max\":36000,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"How long a VIP needs to be still before the movement alarm is triggered\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8297,"Group":{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Call","Json":"{\"name\":\"Call\",\"default\":\"\",\"description\":\"Call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle Call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8298,"Group":{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Name","Json":"{\"name\":\"Name\",\"default\":\"\",\"description\":\"Contact Name\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":8,\"helpText\":\"Insert Contact Name\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8299,"Group":{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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 White List Number 6","Json":"{\"name\":\"Enable Disable White List Number 6\",\"default\":\"true\",\"description\":\"Toggle White list Number 6\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8300,"Group":{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Number","Json":"{\"name\":\"Number\",\"default\":\"\",\"description\":\"Phone Number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8296,"Group":{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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 White List Number 8","Json":"{\"name\":\"Enable Disable White List Number 8\",\"default\":\"true\",\"description\":\"Toggle White list Number 8\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8295,"Group":{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Number","Json":"{\"name\":\"Number\",\"default\":\"\",\"description\":\"Phone Number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8294,"Group":{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Call","Json":"{\"name\":\"Call\",\"default\":\"\",\"description\":\"Call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"add Toggle Call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8293,"Group":{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Name","Json":"{\"name\":\"Name\",\"default\":\"\",\"description\":\"Contact Name\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":8,\"helpText\":\"Insert Contact Name\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8290,"Group":{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Name","Json":"{\"name\":\"Name\",\"default\":\"\",\"description\":\"Contact Name\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":8,\"helpText\":\"Insert Contact Name\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8292,"Group":{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Number","Json":"{\"name\":\"Number\",\"default\":\"\",\"description\":\"Phone Number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8291,"Group":{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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 White List Number 7","Json":"{\"name\":\"Enable Disable White List Number 7\",\"default\":\"true\",\"description\":\"Toggle White list Number 7\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8289,"Group":{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Call","Json":"{\"name\":\"Call\",\"default\":\"\",\"description\":\"Call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"add Toggle Call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8286,"Group":{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Name","Json":"{\"name\":\"Name\",\"default\":\"\",\"description\":\"Contact Name\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":8,\"helpText\":\"Insert Contact Name\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8287,"Group":{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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 White List Number 5","Json":"{\"name\":\"Enable Disable White List Number 5\",\"default\":\"true\",\"description\":\"Toggle White list Number 5\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8288,"Group":{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Number","Json":"{\"name\":\"Number\",\"default\":\"\",\"description\":\"Phone Number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8285,"Group":{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Call","Json":"{\"name\":\"Call\",\"default\":\"\",\"description\":\"Call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle Call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8283,"Group":{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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 White List Number 2","Json":"{\"name\":\"Enable Disable White List Number 2\",\"default\":\"true\",\"description\":\"Toggle White list Number 2\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8284,"Group":{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Number","Json":"{\"name\":\"Number\",\"default\":\"\",\"description\":\"Phone Number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8281,"Group":{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Call","Json":"{\"name\":\"Call\",\"default\":\"\",\"description\":\"Call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle Call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8282,"Group":{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Name","Json":"{\"name\":\"Name\",\"default\":\"\",\"description\":\"Contact Name\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":8,\"helpText\":\"Insert Contact Name\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8280,"Group":{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Number","Json":"{\"name\":\"Number\",\"default\":\"\",\"description\":\"Phone number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8277,"Group":{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Call","Json":"{\"name\":\"Call\",\"default\":\"\",\"description\":\"Call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle Call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8278,"Group":{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Name","Json":"{\"name\":\"Name\",\"default\":\"\",\"description\":\"Contact Name\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":8,\"helpText\":\"Insert Contact Name\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8279,"Group":{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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 White List Number 1","Json":"{\"name\":\"Enable Disable White List Number 1\",\"default\":\"true\",\"description\":\"Toggle White List Number 1\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8334,"Group":{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Call","Json":"{\"name\":\"Call\",\"default\":\"\",\"description\":\"Call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle Call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8272,"Group":{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Number","Json":"{\"name\":\"Number\",\"default\":\"\",\"description\":\"Phone Number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8301,"Group":{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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 White List Number 4","Json":"{\"name\":\"Enable Disable White List Number 4\",\"default\":\"true\",\"description\":\"Toggle White list Number 4\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8303,"Group":{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Name","Json":"{\"name\":\"Name\",\"default\":\"\",\"description\":\"Contact Name\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":8,\"helpText\":\"Insert Contact Name\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8271,"Group":{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Angle","Json":"{\"name\":\"Angle\",\"default\":\"\",\"description\":\"Angle\",\"type\":\"number\",\"suffix\":\"degrees\",\"prefix\":null,\"min\":0,\"max\":90,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The angle required for the Tilt alert to be raised\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8302,"Group":{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Tilt Alert","Json":"{\"name\":\"Enable Disable Tilt Alert\",\"default\":\"true\",\"description\":\"Toggle Tilt alert\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggles feature to enables the Rio to raise an alarm based on an angle change of the VIP for a specified time period\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8305,"Group":{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Time","Json":"{\"name\":\"Time\",\"default\":\"\",\"description\":\"Time\",\"type\":\"number\",\"suffix\":\"seconds\",\"prefix\":null,\"min\":10,\"max\":3600,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The time required at the configured angle to trigger the tilt alert\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8306,"Group":{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Dial","Json":"{\"name\":\"Dial\",\"default\":\"true\",\"description\":\"Dial\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8304,"Group":{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"Volume","Json":"{\"name\":\"Volume\",\"default\":\"\",\"description\":\"Volume\",\"type\":\"number\",\"suffix\":\"%\",\"prefix\":null,\"min\":0,\"max\":100,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Volume setting for the voice prompts\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8335,"Group":{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"Volume","Json":"{\"name\":\"Volume\",\"default\":\"\",\"description\":\"Volume\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":0,\"max\":15,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"the volume of the mic during a call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8332,"Group":{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"Volume","Json":"{\"name\":\"Volume\",\"default\":\"\",\"description\":\"Volume\",\"type\":\"number\",\"suffix\":\"%\",\"prefix\":null,\"min\":0,\"max\":100,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The volume of the ring tone when the Rio is called directly.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8329,"Group":{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"Start","Json":"{\"name\":\"Start\",\"default\":\"\",\"description\":\"Start\",\"type\":\"time\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8330,"Group":{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"End","Json":"{\"name\":\"End\",\"default\":\"\",\"description\":\"End\",\"type\":\"time\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8331,"Group":{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"Enable Disable No Disturb","Json":"{\"name\":\"Enable Disable No Disturb\",\"default\":\"true\",\"description\":\"Toggle Do not disturb\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle feature that specifies a time period during the day when the Rio will not make any sound\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8326,"Group":{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"White List","Json":"{\"name\":\"White List\",\"default\":\"true\",\"description\":\"Call Allow list\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"toggles the allow list of members who can call the Rio\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8327,"Group":{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"Auto Answer After Rings","Json":"{\"name\":\"Auto Answer After Rings\",\"default\":\"\",\"description\":\"Auto-answer after no. of rings\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":0,\"max\":10,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Number of rings the care circle will wait before the Rio auto answers the call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8328,"Group":{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"Auto Answer","Json":"{\"name\":\"Auto Answer\",\"default\":\"true\",\"description\":\"Auto-Answer\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"toggles feature that enables a number in the whitelist to call through the Rio without any interaction required by the VIP\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8323,"Group":{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"Silent Call Mode","Json":"{\"name\":\"Silent Call Mode\",\"default\":\"\",\"description\":\"Silent-Call Mode\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8324,"Group":{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"Button Hang Up","Json":"{\"name\":\"Button Hang Up\",\"default\":\"true\",\"description\":\"Disconnect call by button\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable disconnecting a call by a button\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8325,"Group":{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"SMS White List","Json":"{\"name\":\"SMS White List\",\"default\":\"true\",\"description\":\"SMS Allow List\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle the ability to restrict numbers that can send SMS to the device\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8322,"Group":{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Dial","Json":"{\"name\":\"Dial\",\"default\":\"true\",\"description\":\"Dial\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8321,"Group":{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Time","Json":"{\"name\":\"Time\",\"default\":\"\",\"description\":\"Time in non-movement\",\"type\":\"number\",\"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\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8320,"Group":{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable No Motion Alert","Json":"{\"name\":\"Enable Disable No Motion Alert\",\"default\":\"true\",\"description\":\"Toggle Non-movement alert\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"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":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8318,"Group":{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Power Low","Json":"{\"name\":\"Power Low\",\"default\":\"true\",\"description\":\"Battery Low\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8316,"Group":{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Power On","Json":"{\"name\":\"Power On\",\"default\":\"true\",\"description\":\"Power On\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8315,"Group":{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Power Alert","Json":"{\"name\":\"Enable Disable Power Alert\",\"default\":\"true\",\"description\":\"Toggle Power Alerts\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8319,"Group":{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Low Power Threshold","Json":"{\"name\":\"Low Power Threshold\",\"default\":\"\",\"description\":\"Low Power Threshold %\",\"type\":\"number\",\"suffix\":\"%\",\"prefix\":null,\"min\":10,\"max\":50,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Set the threshold at which the low threshold is raised.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8317,"Group":{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Power Off","Json":"{\"name\":\"Power Off\",\"default\":\"true\",\"description\":\"Power Off\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8311,"Group":{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","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":"Speed","Json":"{\"name\":\"Speed\",\"default\":\"\",\"description\":\"Speed\",\"type\":\"number\",\"suffix\":\"kph\",\"prefix\":null,\"min\":20,\"max\":400,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The speed in kph required to trigger the over speed alarm\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8312,"Group":{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","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 Over Speed Alert","Json":"{\"name\":\"Enable Disable Over Speed Alert\",\"default\":\"true\",\"description\":\"Toggle Over Speed Alert\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle feature that enables raising an alarm when the VIP goes above a specified speed.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8333,"Group":{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","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":"Volume","Json":"{\"name\":\"Volume\",\"default\":\"\",\"description\":\"Volume\",\"type\":\"number\",\"suffix\":\"%\",\"prefix\":null,\"min\":0,\"max\":100,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Volume of the speaker\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8273,"Group":{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Call","Json":"{\"name\":\"Call\",\"default\":\"\",\"description\":\"Call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle Call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8275,"Group":{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Number","Json":"{\"name\":\"Number\",\"default\":\"\",\"description\":\"Phone Number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8276,"Group":{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable White List Number 3","Json":"{\"name\":\"Enable Disable White List Number 3\",\"default\":\"true\",\"description\":\"Toggle White list Number 3\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8274,"Group":{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Name","Json":"{\"name\":\"Name\",\"default\":\"\",\"description\":\"Contact Name\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":8,\"helpText\":\"Insert Contact Name\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8640,"Group":{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Heart Rate Monitor","Json":"{\"name\":\"Enable Disable Heart Rate Monitor\",\"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\":\"Enable/Disable Heart Rate Monitor\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":8640,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Disable Heart Rate Monitor\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable Heart Rate Monitor\\\",\\\"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\\\":\\\"Enable/Disable Heart Rate Monitor\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507749},{"Type":0,"NewValue":"{\"Id\":8640,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Disable Heart Rate Monitor\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable Heart Rate Monitor\\\",\\\"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\\\":\\\"Enable/Disable Heart Rate Monitor\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":3498,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.4\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Heart Rate Detecting Interval\",\"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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '05';\\n totalLenght = '0400';\\n}\\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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":25,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507754},{"Type":1,"NewValue":"{\"Id\":8640,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Disable Heart Rate Monitor\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable Heart Rate Monitor\\\",\\\"default\\\":\\\"false\\\",\\\"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\\\":\\\"Enable/Disable Heart Rate Monitor\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707985883},{"Type":0,"NewValue":"{\"Id\":8640,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Disable Heart Rate Monitor\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable Heart Rate Monitor\\\",\\\"default\\\":\\\"false\\\",\\\"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\\\":\\\"Enable/Disable Heart Rate Monitor\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":{\"Id\":3960,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.7\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 00 12 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) \\r\\nvar messageBody = '0211360000';\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707985888}],"LanguageId":null,"Tags":[]},{"Id":8640,"Group":{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Heart Rate Monitor","Json":"{\"name\":\"Enable Disable Heart Rate Monitor\",\"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\":\"Enable/Disable Heart Rate Monitor\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":{"Id":3498,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.4","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Heart Rate Detecting Interval","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';\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\nif (params.DeviceVersion.DeviceVersion == '1') {\n command = '02';\n keyLength = '02';\n key = '11';\n heartBeat = '05';\n totalLenght = '0400';\n}\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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":25,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8641,"Group":{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Heart Rate Detecting Interval","Json":"{\"name\":\"Heart Rate Detecting Interval\",\"default\":\"\",\"description\":null,\"type\":\"number\",\"suffix\":\"min\",\"prefix\":null,\"min\":1,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Insert detecting interval for heart rate monitoring in minutes\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":8641,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Detecting Interval\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Detecting Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"min\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert detecting interval for heart rate monitoring in minutes\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507804},{"Type":0,"NewValue":"{\"Id\":8641,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Detecting Interval\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Detecting Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"min\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert detecting interval for heart rate monitoring in minutes\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":3498,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.4\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Heart Rate Detecting Interval\",\"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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '05';\\n totalLenght = '0400';\\n}\\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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":25,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507810},{"Type":1,"NewValue":"{\"Id\":8641,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Detecting Interval\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Detecting Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"min\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert detecting interval for heart rate monitoring in minutes\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707985910},{"Type":0,"NewValue":"{\"Id\":8641,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Detecting Interval\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Detecting Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"min\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert detecting interval for heart rate monitoring in minutes\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":3960,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.7\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 00 12 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) \\r\\nvar messageBody = '0211360000';\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707985915}],"LanguageId":null,"Tags":[]},{"Id":8641,"Group":{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Heart Rate Detecting Interval","Json":"{\"name\":\"Heart Rate Detecting Interval\",\"default\":\"\",\"description\":null,\"type\":\"number\",\"suffix\":\"min\",\"prefix\":null,\"min\":1,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Insert detecting interval for heart rate monitoring in minutes\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":3498,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.4","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Heart Rate Detecting Interval","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';\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\nif (params.DeviceVersion.DeviceVersion == '1') {\n command = '02';\n keyLength = '02';\n key = '11';\n heartBeat = '05';\n totalLenght = '0400';\n}\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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":25,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8642,"Group":{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Step Counting","Json":"{\"name\":\"Enable Disable Step Counting\",\"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\":\"Enable/Disable Step Counting\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":8642,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Disable Step Counting\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable Step Counting\\\",\\\"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\\\":\\\"Enable/Disable Step Counting\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507929},{"Type":0,"NewValue":"{\"Id\":8642,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Disable Step Counting\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable Step Counting\\\",\\\"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\\\":\\\"Enable/Disable Step Counting\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":3499,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.4\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '05';\\n totalLenght = '0400';\\n}\\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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":25,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507935},{"Type":1,"NewValue":"{\"Id\":8642,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"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 Step Counting\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable Step Counting\\\",\\\"default\\\":\\\"false\\\",\\\"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\\\":\\\"Enable/Disable Step Counting\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707985928},{"Type":0,"NewValue":"{\"Id\":8642,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"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 Step Counting\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable Step Counting\\\",\\\"default\\\":\\\"false\\\",\\\"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\\\":\\\"Enable/Disable Step Counting\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":{\"Id\":3960,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.7\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 00 12 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) \\r\\nvar messageBody = '0211360000';\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707985935}],"LanguageId":null,"Tags":[]},{"Id":8642,"Group":{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Step Counting","Json":"{\"name\":\"Enable Disable Step Counting\",\"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\":\"Enable/Disable Step Counting\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":{"Id":3499,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.4","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Step Collect Settings","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 totalLenght = '0700';\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\nif (params.DeviceVersion.DeviceVersion == '1') {\n command = '02';\n keyLength = '02';\n key = '11';\n heartBeat = '05';\n totalLenght = '0400';\n}\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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":25,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8643,"Group":{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Step Counting Interval","Json":"{\"name\":\"Step Counting Interval\",\"default\":\"\",\"description\":null,\"type\":\"number\",\"suffix\":\"min\",\"prefix\":null,\"min\":1,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Insert step counting interval in minutes\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":8643,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Interval\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"min\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert step counting interval in minutes\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507992},{"Type":0,"NewValue":"{\"Id\":8643,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Interval\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"min\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert step counting interval in minutes\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":3499,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.4\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '05';\\n totalLenght = '0400';\\n}\\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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":25,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507997},{"Type":1,"NewValue":"{\"Id\":8643,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Interval\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"min\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert step counting interval in minutes\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707985951},{"Type":0,"NewValue":"{\"Id\":8643,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Interval\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"min\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert step counting interval in minutes\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":3960,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.7\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 00 12 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) \\r\\nvar messageBody = '0211360000';\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707985957}],"LanguageId":null,"Tags":[]},{"Id":8643,"Group":{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Step Counting Interval","Json":"{\"name\":\"Step Counting Interval\",\"default\":\"\",\"description\":null,\"type\":\"number\",\"suffix\":\"min\",\"prefix\":null,\"min\":1,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Insert step counting interval in minutes\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":3499,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.4","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Step Collect Settings","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 totalLenght = '0700';\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\nif (params.DeviceVersion.DeviceVersion == '1') {\n command = '02';\n keyLength = '02';\n key = '11';\n heartBeat = '05';\n totalLenght = '0400';\n}\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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":25,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8644,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Enable Control","Json":"{\"name\":\"Enable Disable Enable Control\",\"default\":\"\",\"description\":\"Enable Step Counting\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enables/Disables step counting function\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":8644,\"Group\":{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Disable Enable Control\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable Enable Control\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable Step Counting\\\",\\\"type\\\":\\\"enable\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enables/Disables step counting function\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694508203},{"Type":0,"NewValue":"{\"Id\":8644,\"Group\":{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Disable Enable Control\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable Enable Control\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable Step Counting\\\",\\\"type\\\":\\\"enable\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enables/Disables step counting function\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":3295,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.4\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Enable Control\",\"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}\\n// activity fuction, step counting, home-wifi location, data-saver, NLprovider, power control,\\n// sos cancel switch, Long SMS, plus 7 more without functions\\nvalue += '000000';\\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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":25,\"Order\":5},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694508209}],"LanguageId":null,"Tags":[]},{"Id":8644,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Enable Control","Json":"{\"name\":\"Enable Disable Enable Control\",\"default\":\"\",\"description\":\"Enable Step Counting\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enables/Disables step counting function\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":{"Id":3295,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.4","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Enable Control","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}\n// activity fuction, step counting, home-wifi location, data-saver, NLprovider, power control,\n// sos cancel switch, Long SMS, plus 7 more without functions\nvalue += '000000';\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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":25,"Order":5},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8736,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Step","Json":"{\"name\":\"Step\",\"default\":\"\",\"description\":\"Enable Step Counting\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enables/Disables steps counting function\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":8736,\"Group\":{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step\",\"Json\":\"{\\\"name\\\":\\\"Step\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable Step Counting\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enables/Disables steps counting function\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694716249},{"Type":0,"NewValue":"{\"Id\":8736,\"Group\":{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step\",\"Json\":\"{\\\"name\\\":\\\"Step\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable Step Counting\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enables/Disables steps counting function\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":3295,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.4\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Enable Control\",\"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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":35,\"Order\":5},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694716254}],"LanguageId":null,"Tags":[]},{"Id":8736,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Step","Json":"{\"name\":\"Step\",\"default\":\"\",\"description\":\"Enable Step Counting\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enables/Disables steps counting function\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":{"Id":3295,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.4","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Enable Control","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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":35,"Order":5},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9201,"Group":{"Id":5420,"Name":"WiFi Connect","Json":{"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":"Enable Disable WiFi Connect","Json":"{\"name\":\"Enable Disable WiFi Connect\",\"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":[{"Type":0,"NewValue":"{\"Id\":9201,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"Enable Disable WiFi Connect\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable WiFi Connect\\\",\\\"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\":[],\"Tags\":[]}","Timestamp":1706035083},{"Type":1,"NewValue":"{\"Id\":9201,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"Enable Disable WiFi Connect\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable WiFi Connect\\\",\\\"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\":[],\"Tags\":[]}","Timestamp":1706035435},{"Type":1,"NewValue":"{\"Id\":9201,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"Enable Disable WiFi Connect\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable WiFi Connect\\\",\\\"default\\\":\\\"false\\\",\\\"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\":[],\"Tags\":[]}","Timestamp":1706037499},{"Type":0,"NewValue":"{\"Id\":9201,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"Enable Disable WiFi Connect\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable WiFi Connect\\\",\\\"default\\\":\\\"false\\\",\\\"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\":{\"Id\":3805,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.7\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set WiFi Connect\",\"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 msg = [];\\r\\nvar configs = [];\\r\\n//var 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.WiFiConnect.EnableDisableWiFiConnect == 'true') {\\r\\n if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase();\\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":6,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706037506},{"Type":1,"NewValue":"{\"Id\":9201,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"Enable Disable WiFi Connect\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable WiFi Connect\\\",\\\"default\\\":\\\"false\\\",\\\"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\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706344873},{"Type":1,"NewValue":"{\"Id\":9201,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"Enable Disable WiFi Connect\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable WiFi Connect\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Enable Disable WiFi Connect\\\",\\\"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\":[],\"Tags\":[]}","Timestamp":1706345588},{"Type":1,"NewValue":"{\"Id\":9201,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"Enable Disable WiFi Connect\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable WiFi Connect\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Enable Disable WiFi Connect\\\",\\\"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\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706345599}],"LanguageId":null,"Tags":[]},{"Id":9202,"Group":{"Id":5420,"Name":"WiFi Connect","Json":{"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":"SSID","Json":"{\"name\":\"SSID\",\"default\":\"\",\"description\":null,\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9202,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"SSID\",\"Json\":\"{\\\"name\\\":\\\"SSID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706035167},{"Type":1,"NewValue":"{\"Id\":9202,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"SSID\",\"Json\":\"{\\\"name\\\":\\\"SSID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706035440},{"Type":1,"NewValue":"{\"Id\":9202,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"SSID\",\"Json\":\"{\\\"name\\\":\\\"SSID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706037524},{"Type":0,"NewValue":"{\"Id\":9202,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"SSID\",\"Json\":\"{\\\"name\\\":\\\"SSID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":3805,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.7\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set WiFi Connect\",\"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 msg = [];\\r\\nvar configs = [];\\r\\n//var 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.WiFiConnect.EnableDisableWiFiConnect == 'true') {\\r\\n if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase();\\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":6,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706037536},{"Type":1,"NewValue":"{\"Id\":9202,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"SSID\",\"Json\":\"{\\\"name\\\":\\\"SSID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706344878},{"Type":1,"NewValue":"{\"Id\":9202,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"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\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert SSID name of the WiFi Network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706344967},{"Type":1,"NewValue":"{\"Id\":9202,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"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\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert SSID name of the WiFi Network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706345604},{"Type":1,"NewValue":"{\"Id\":9202,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"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\\\":null,\\\"helpText\\\":\\\"Insert SSID name of the WiFi Network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706345663},{"Type":1,"NewValue":"{\"Id\":9202,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"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\\\":null,\\\"helpText\\\":\\\"Insert SSID name of the WiFi Network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706345702},{"Type":1,"NewValue":"{\"Id\":9202,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"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\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert SSID name of the WiFi Network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706618108}],"LanguageId":null,"Tags":[]},{"Id":9203,"Group":{"Id":5420,"Name":"WiFi Connect","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Password","Json":"{\"name\":\"Password\",\"default\":\"\",\"description\":null,\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9203,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706035231},{"Type":1,"NewValue":"{\"Id\":9203,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":2}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706035446},{"Type":1,"NewValue":"{\"Id\":9203,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706037562},{"Type":0,"NewValue":"{\"Id\":9203,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":3805,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.7\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set WiFi Connect\",\"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 msg = [];\\r\\nvar configs = [];\\r\\n//var 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.WiFiConnect.EnableDisableWiFiConnect == 'true') {\\r\\n if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase();\\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":6,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706037567},{"Type":1,"NewValue":"{\"Id\":9203,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":2}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706344897},{"Type":1,"NewValue":"{\"Id\":9203,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Password\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert password of the WiFi Network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706345031},{"Type":1,"NewValue":"{\"Id\":9203,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Password\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert password of the WiFi Network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":2}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706345610},{"Type":1,"NewValue":"{\"Id\":9203,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Password\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":1,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert password of the WiFi Network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706345679},{"Type":1,"NewValue":"{\"Id\":9203,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Password\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":1,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert password of the WiFi Network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":2}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706345708},{"Type":1,"NewValue":"{\"Id\":9203,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Password\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert password of the WiFi Network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706618124}],"LanguageId":null,"Tags":[]},{"Id":9201,"Group":{"Id":5420,"Name":"WiFi Connect","Json":{"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":"Enable Disable WiFi Connect","Json":"{\"name\":\"Enable Disable WiFi Connect\",\"default\":\"false\",\"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":{"Id":3805,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.7","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set WiFi Connect","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 msg = [];\r\nvar configs = [];\r\n//var 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.WiFiConnect.EnableDisableWiFiConnect == 'true') {\r\n if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase();\r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":6,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9202,"Group":{"Id":5420,"Name":"WiFi Connect","Json":{"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":"SSID","Json":"{\"name\":\"SSID\",\"default\":\"\",\"description\":null,\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":3805,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.7","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set WiFi Connect","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 msg = [];\r\nvar configs = [];\r\n//var 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.WiFiConnect.EnableDisableWiFiConnect == 'true') {\r\n if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase();\r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":6,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9203,"Group":{"Id":5420,"Name":"WiFi Connect","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Password","Json":"{\"name\":\"Password\",\"default\":\"\",\"description\":null,\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":3805,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.7","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set WiFi Connect","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 msg = [];\r\nvar configs = [];\r\n//var 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.WiFiConnect.EnableDisableWiFiConnect == 'true') {\r\n if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase();\r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":6,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8640,"Group":{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Heart Rate Monitor","Json":"{\"name\":\"Enable Disable Heart Rate Monitor\",\"default\":\"false\",\"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\":\"Enable/Disable Heart Rate Monitor\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":{"Id":3960,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.7","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set Watch Settings","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 Watch Settings' Only enable y disable:\r\n// params.StepCounting.EnableDisableStepCounting == 'true'\r\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\r\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\r\n// Test enabled both\r\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\r\n// test step on HRT off\r\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test step off HRT on\r\n// 02 11 36 00 00 12 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test both off \r\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) \r\nvar messageBody = '0211360000';\r\n// Watch setting related to Step and heart rate settings\r\nvar dataSMS = '';\r\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1A00003E00000014000000000000';\r\n /* if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0A00003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1200003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0200003800000014000000000000';\r\n} else {\r\n messageBody += '0200003800000014000000000000';\r\n}\r\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\r\nif (params.DeviceVersion.DeviceVersion == '1') {\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n heartBeat = '0A';\r\n totalLenght = '0400';\r\n messageBody = command + keyLength + key + heartBeat;\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":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8641,"Group":{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Heart Rate Detecting Interval","Json":"{\"name\":\"Heart Rate Detecting Interval\",\"default\":\"\",\"description\":null,\"type\":\"number\",\"suffix\":\"min\",\"prefix\":null,\"min\":1,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Insert detecting interval for heart rate monitoring in minutes\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":3960,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.7","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set Watch Settings","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 Watch Settings' Only enable y disable:\r\n// params.StepCounting.EnableDisableStepCounting == 'true'\r\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\r\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\r\n// Test enabled both\r\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\r\n// test step on HRT off\r\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test step off HRT on\r\n// 02 11 36 00 00 12 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test both off \r\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) \r\nvar messageBody = '0211360000';\r\n// Watch setting related to Step and heart rate settings\r\nvar dataSMS = '';\r\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1A00003E00000014000000000000';\r\n /* if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0A00003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1200003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0200003800000014000000000000';\r\n} else {\r\n messageBody += '0200003800000014000000000000';\r\n}\r\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\r\nif (params.DeviceVersion.DeviceVersion == '1') {\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n heartBeat = '0A';\r\n totalLenght = '0400';\r\n messageBody = command + keyLength + key + heartBeat;\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":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8642,"Group":{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","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 Step Counting","Json":"{\"name\":\"Enable Disable Step Counting\",\"default\":\"false\",\"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\":\"Enable/Disable Step Counting\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":{"Id":3960,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.7","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set Watch Settings","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 Watch Settings' Only enable y disable:\r\n// params.StepCounting.EnableDisableStepCounting == 'true'\r\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\r\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\r\n// Test enabled both\r\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\r\n// test step on HRT off\r\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test step off HRT on\r\n// 02 11 36 00 00 12 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test both off \r\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) \r\nvar messageBody = '0211360000';\r\n// Watch setting related to Step and heart rate settings\r\nvar dataSMS = '';\r\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1A00003E00000014000000000000';\r\n /* if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0A00003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1200003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0200003800000014000000000000';\r\n} else {\r\n messageBody += '0200003800000014000000000000';\r\n}\r\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\r\nif (params.DeviceVersion.DeviceVersion == '1') {\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n heartBeat = '0A';\r\n totalLenght = '0400';\r\n messageBody = command + keyLength + key + heartBeat;\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":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8643,"Group":{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Step Counting Interval","Json":"{\"name\":\"Step Counting Interval\",\"default\":\"\",\"description\":null,\"type\":\"number\",\"suffix\":\"min\",\"prefix\":null,\"min\":1,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Insert step counting interval in minutes\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":3960,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.7","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set Watch Settings","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 Watch Settings' Only enable y disable:\r\n// params.StepCounting.EnableDisableStepCounting == 'true'\r\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\r\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\r\n// Test enabled both\r\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\r\n// test step on HRT off\r\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test step off HRT on\r\n// 02 11 36 00 00 12 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test both off \r\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) \r\nvar messageBody = '0211360000';\r\n// Watch setting related to Step and heart rate settings\r\nvar dataSMS = '';\r\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1A00003E00000014000000000000';\r\n /* if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0A00003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1200003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0200003800000014000000000000';\r\n} else {\r\n messageBody += '0200003800000014000000000000';\r\n}\r\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\r\nif (params.DeviceVersion.DeviceVersion == '1') {\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n heartBeat = '0A';\r\n totalLenght = '0400';\r\n messageBody = command + keyLength + key + heartBeat;\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":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9429,"Group":{"Id":5522,"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":[]},"Name":"Configuration Mode","Json":"{\"name\":\"Configuration Mode\",\"default\":\"\",\"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\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9429,\"Group\":{\"Id\":5522,\"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\":[]},\"Name\":\"Configuration Mode\",\"Json\":\"{\\\"name\\\":\\\"Configuration Mode\\\",\\\"default\\\":\\\"\\\",\\\"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\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1708016984},{"Type":0,"NewValue":"{\"Id\":9429,\"Group\":{\"Id\":5522,\"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\":[]},\"Name\":\"Configuration Mode\",\"Json\":\"{\\\"name\\\":\\\"Configuration Mode\\\",\\\"default\\\":\\\"\\\",\\\"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\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":3963,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.7\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Control Configuration Mode\",\"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`;\\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},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1708016992},{"Type":1,"NewValue":"{\"Id\":9429,\"Group\":{\"Id\":5522,\"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\":[]},\"Name\":\"Configuration Mode\",\"Json\":\"{\\\"name\\\":\\\"Configuration Mode\\\",\\\"default\\\":\\\"\\\",\\\"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\\\":0}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718618526}],"LanguageId":null,"Tags":[]},{"Id":9429,"Group":{"Id":5522,"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":[]},"Name":"Configuration Mode","Json":"{\"name\":\"Configuration Mode\",\"default\":\"\",\"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\"]}","Default":"false","Command":{"Id":3963,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.7","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Control Configuration Mode","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`;\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},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9626,"Group":{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Heart Rate Watch Face","Json":"{\"name\":\"Heart Rate Watch Face\",\"default\":\"\",\"description\":null,\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9626,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709751249},{"Type":0,"NewValue":"{\"Id\":9626,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":3960,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.8\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) \\r\\nvar messageBody = '0211360008'; // step count/heart value display\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003A00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709751289},{"Type":1,"NewValue":"{\"Id\":9626,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Watch Face\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":null,\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enable/Disable Heart Rate Watch Face\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709751323},{"Type":2,"NewValue":"{\"Id\":9626,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Watch Face\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":null,\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enable/Disable Heart Rate Watch Face\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710351065}],"LanguageId":null,"Tags":[]},{"Id":9626,"Group":{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Heart Rate Watch Face","Json":"{\"name\":\"Heart Rate Watch Face\",\"default\":\"\",\"description\":null,\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":{"Id":3960,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.8","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set Watch Settings","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 Watch Settings' Only enable y disable:\r\n// params.StepCounting.EnableDisableStepCounting == 'true'\r\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\r\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\r\n// Test enabled both\r\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\r\n// test step on HRT off\r\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test step off HRT on\r\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\r\n// test both off \r\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) \r\nvar messageBody = '0211360008'; // step count/heart value display\r\n// Watch setting related to Step and heart rate settings\r\nvar dataSMS = '';\r\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1A00003E00000014000000000000';\r\n /* if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0A00003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1200003A00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0200003800000014000000000000';\r\n} else {\r\n messageBody += '0200003800000014000000000000';\r\n}\r\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\r\nif (params.DeviceVersion.DeviceVersion == '1') {\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n heartBeat = '0A';\r\n totalLenght = '0400';\r\n messageBody = command + keyLength + key + heartBeat;\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":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9627,"Group":{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Step Counting Watch Face","Json":"{\"name\":\"Step Counting Watch Face\",\"default\":\"\",\"description\":null,\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable/Disable Step Counting Watch Face\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9627,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enable/Disable Step Counting Watch Face\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709751421},{"Type":0,"NewValue":"{\"Id\":9627,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enable/Disable Step Counting Watch Face\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":3960,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.8\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) \\r\\nvar messageBody = '0211360008'; // step count/heart value display\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003A00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709751462},{"Type":2,"NewValue":"{\"Id\":9627,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enable/Disable Step Counting Watch Face\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710351153}],"LanguageId":null,"Tags":[]},{"Id":9627,"Group":{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Step Counting Watch Face","Json":"{\"name\":\"Step Counting Watch Face\",\"default\":\"\",\"description\":null,\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable/Disable Step Counting Watch Face\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":{"Id":3960,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.8","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set Watch Settings","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 Watch Settings' Only enable y disable:\r\n// params.StepCounting.EnableDisableStepCounting == 'true'\r\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\r\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\r\n// Test enabled both\r\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\r\n// test step on HRT off\r\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test step off HRT on\r\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\r\n// test both off \r\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) \r\nvar messageBody = '0211360008'; // step count/heart value display\r\n// Watch setting related to Step and heart rate settings\r\nvar dataSMS = '';\r\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1A00003E00000014000000000000';\r\n /* if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0A00003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1200003A00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0200003800000014000000000000';\r\n} else {\r\n messageBody += '0200003800000014000000000000';\r\n}\r\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\r\nif (params.DeviceVersion.DeviceVersion == '1') {\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n heartBeat = '0A';\r\n totalLenght = '0400';\r\n messageBody = command + keyLength + key + heartBeat;\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":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9628,"Group":{"Id":5605,"Name":"Watch Face","Json":{"description":"Watch Face (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Set Watch Face","Json":"{\"name\":\"Set Watch Face\",\"default\":\"\",\"description\":\"Select Watch Face\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Select Watch Face (Analog or Digital)\",\"options\":[{\"label\":\"Analog Dial 1\",\"value\":\"00\"},{\"label\":\"Digital Dial 1\",\"value\":\"01\"},{\"label\":\"Analog Dial 2\",\"value\":\"02\"},{\"label\":\"Digital Dial 2\",\"value\":\"03\"},{\"label\":\"Digital Dial 3\",\"value\":\"04\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9628,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Set Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Set Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Select Watch Face\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select Watch Face (Analog or Digital)\\\",\\\"options\\\":[{\\\"label\\\":\\\"Analog Dial 1\\\",\\\"value\\\":\\\"00\\\"},{\\\"label\\\":\\\"Digital Dial 1\\\",\\\"value\\\":\\\"01\\\"},{\\\"label\\\":\\\"Analog Dial 2\\\",\\\"value\\\":\\\"02\\\"},{\\\"label\\\":\\\"Digital Dial 2\\\",\\\"value\\\":\\\"03\\\"},{\\\"label\\\":\\\"Digital Dial 3\\\",\\\"value\\\":\\\"04\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709836470},{"Type":0,"NewValue":"{\"Id\":9628,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Set Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Set Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Select Watch Face\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select Watch Face (Analog or Digital)\\\",\\\"options\\\":[{\\\"label\\\":\\\"Analog Dial 1\\\",\\\"value\\\":\\\"00\\\"},{\\\"label\\\":\\\"Digital Dial 1\\\",\\\"value\\\":\\\"01\\\"},{\\\"label\\\":\\\"Analog Dial 2\\\",\\\"value\\\":\\\"02\\\"},{\\\"label\\\":\\\"Digital Dial 2\\\",\\\"value\\\":\\\"03\\\"},{\\\"label\\\":\\\"Digital Dial 3\\\",\\\"value\\\":\\\"04\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":3960,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.8\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) , lenght and key\\r\\nvar messageBody = '021136';\\r\\n// step count/heart value display\\r\\n// Watch setting related FACE ID\\r\\nswitch (params.HeartRateMonitor.WatchFace) {\\r\\n case x:\\r\\n // code block\\r\\n break;\\r\\n case y:\\r\\n // code block\\r\\n break;\\r\\n default:\\r\\n // code block\\r\\n}\\r\\nif (params.HeartRateMonitor.HeartRateWatchFace == 'true') {\\r\\n messageBody += '0108'; // Face ID 1 \\r\\n} else if (params.StepCounting.StepCountingWatchFace == 'true') {\\r\\n messageBody += '0208'; // Face ID 2\\r\\n} else {\\r\\n messageBody += '0008';\\r\\n} // Default Face ID 0\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003A00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709836476},{"Type":1,"NewValue":"{\"Id\":9628,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Set Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Set Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Select Watch Face\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select Watch Face (Analog or Digital)\\\",\\\"options\\\":[{\\\"label\\\":\\\"Analog Dial 1\\\",\\\"value\\\":\\\"00\\\"},{\\\"label\\\":\\\"Digital Dial 1\\\",\\\"value\\\":\\\"01\\\"},{\\\"label\\\":\\\"Analog Dial 2\\\",\\\"value\\\":\\\"02\\\"},{\\\"label\\\":\\\"Digital Dial 2\\\",\\\"value\\\":\\\"03\\\"},{\\\"label\\\":\\\"Digital Dial 3\\\",\\\"value\\\":\\\"04\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"],\\\"order\\\":0}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709837495}],"LanguageId":null,"Tags":[]},{"Id":9628,"Group":{"Id":5605,"Name":"Watch Face","Json":{"description":"Watch Face (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Set Watch Face","Json":"{\"name\":\"Set Watch Face\",\"default\":\"\",\"description\":\"Select Watch Face\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Select Watch Face (Analog or Digital)\",\"options\":[{\"label\":\"Analog Dial 1\",\"value\":\"00\"},{\"label\":\"Digital Dial 1\",\"value\":\"01\"},{\"label\":\"Analog Dial 2\",\"value\":\"02\"},{\"label\":\"Digital Dial 2\",\"value\":\"03\"},{\"label\":\"Digital Dial 3\",\"value\":\"04\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":{"Id":3960,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.8","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set Watch Settings","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 Watch Settings' Only enable y disable:\r\n// params.StepCounting.EnableDisableStepCounting == 'true'\r\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\r\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\r\n// Test enabled both\r\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\r\n// test step on HRT off\r\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test step off HRT on\r\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\r\n// test both off \r\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) , lenght and key\r\nvar messageBody = '021136';\r\n// step count/heart value display\r\n// Watch setting related FACE ID\r\nswitch (params.HeartRateMonitor.WatchFace) {\r\n case x:\r\n // code block\r\n break;\r\n case y:\r\n // code block\r\n break;\r\n default:\r\n // code block\r\n}\r\nif (params.HeartRateMonitor.HeartRateWatchFace == 'true') {\r\n messageBody += '0108'; // Face ID 1 \r\n} else if (params.StepCounting.StepCountingWatchFace == 'true') {\r\n messageBody += '0208'; // Face ID 2\r\n} else {\r\n messageBody += '0008';\r\n} // Default Face ID 0\r\n// Watch setting related to Step and heart rate settings\r\nvar dataSMS = '';\r\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1A00003E00000014000000000000';\r\n /* if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0A00003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1200003A00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0200003800000014000000000000';\r\n} else {\r\n messageBody += '0200003800000014000000000000';\r\n}\r\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\r\nif (params.DeviceVersion.DeviceVersion == '1') {\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n heartBeat = '0A';\r\n totalLenght = '0400';\r\n messageBody = command + keyLength + key + heartBeat;\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":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9629,"Group":{"Id":5605,"Name":"Watch Face","Json":{"description":"Watch Face (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Heart Rate Watch Face","Json":"{\"name\":\"Heart Rate Watch Face\",\"default\":\"\",\"description\":\"Enable/Disable Heart Rate Watch Face\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9629,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable/Disable Heart Rate Watch Face\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709837461},{"Type":0,"NewValue":"{\"Id\":9629,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable/Disable Heart Rate Watch Face\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":3960,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.8\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) , lenght and key\\r\\nvar messageBody = '021136';\\r\\n// step count/heart value display\\r\\n// Watch setting related FACE ID\\r\\nif (params.WatchFace.SetWatchFace) {\\r\\n messageBody += params.WatchFace.SetWatchFace; // Face ID \\r\\n} else {\\r\\n messageBody += '00'; // Analog Face Default FACE ID 0 \\r\\n}\\r\\n/*\\r\\nif (params.HeartRateMonitor.HeartRateWatchFace == 'true') {\\r\\n messageBody += '0108'; // Face ID 1 \\r\\n} else if (params.StepCounting.StepCountingWatchFace == 'true') {\\r\\n messageBody += '0208'; // Face ID 2\\r\\n} else {\\r\\n messageBody += '0008';\\r\\n} // Default Face ID 0\\r\\n*/\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '1200003A00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709837469},{"Type":1,"NewValue":"{\"Id\":9629,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable/Disable Heart Rate Watch Face\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709837499},{"Type":1,"NewValue":"{\"Id\":9629,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Watch Face\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable/Disable Heart Rate Watch Menu\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710182685},{"Type":1,"NewValue":"{\"Id\":9629,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Watch Face\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable/Disable Heart Rate Watch Menu\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710184165}],"LanguageId":null,"Tags":[]},{"Id":9629,"Group":{"Id":5605,"Name":"Watch Face","Json":{"description":"Watch Face (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Heart Rate Watch Face","Json":"{\"name\":\"Heart Rate Watch Face\",\"default\":\"\",\"description\":\"Enable/Disable Heart Rate Watch Face\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":{"Id":3960,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.8","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set Watch Settings","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 Watch Settings' Only enable y disable:\r\n// params.StepCounting.EnableDisableStepCounting == 'true'\r\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\r\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\r\n// Test enabled both\r\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\r\n// test step on HRT off\r\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test step off HRT on\r\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\r\n// test both off \r\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) , lenght and key\r\nvar messageBody = '021136';\r\n// step count/heart value display\r\n// Watch setting related FACE ID\r\nif (params.WatchFace.SetWatchFace) {\r\n messageBody += params.WatchFace.SetWatchFace; // Face ID \r\n} else {\r\n messageBody += '00'; // Analog Face Default FACE ID 0 \r\n}\r\n/*\r\nif (params.HeartRateMonitor.HeartRateWatchFace == 'true') {\r\n messageBody += '0108'; // Face ID 1 \r\n} else if (params.StepCounting.StepCountingWatchFace == 'true') {\r\n messageBody += '0208'; // Face ID 2\r\n} else {\r\n messageBody += '0008';\r\n} // Default Face ID 0\r\n*/\r\n// Watch setting related to Step and heart rate settings\r\nvar dataSMS = '';\r\nif ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'true')) {\r\n messageBody += '1A00003E00000014000000000000';\r\n} else if ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'false')) {\r\n messageBody += '0A00003C00000014000000000000';\r\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'true')) {\r\n messageBody += '1200003A00000014000000000000';\r\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'false')) {\r\n messageBody += '0200003800000014000000000000';\r\n} else {\r\n messageBody += '0200003800000014000000000000';\r\n}\r\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\r\nif (params.DeviceVersion.DeviceVersion == '1') {\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n heartBeat = '0A';\r\n totalLenght = '0400';\r\n messageBody = command + keyLength + key + heartBeat;\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":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9630,"Group":{"Id":5605,"Name":"Watch Face","Json":{"description":"Watch Face (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Step Counting Watch Face","Json":"{\"name\":\"Step Counting Watch Face\",\"default\":\"\",\"description\":\"Enable/Disable Step Counting Watch Face\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9630,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable/Disable Step Counting Watch Face\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709837549},{"Type":0,"NewValue":"{\"Id\":9630,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable/Disable Step Counting Watch Face\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":3960,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.8\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) , lenght and key\\r\\nvar messageBody = '021136';\\r\\n// step count/heart value display\\r\\n// Watch setting related FACE ID\\r\\nif (params.WatchFace.SetWatchFace) {\\r\\n messageBody += params.WatchFace.SetWatchFace; // Face ID \\r\\n} else {\\r\\n messageBody += '00'; // Analog Face Default FACE ID 0 \\r\\n}\\r\\n/*\\r\\nif (params.HeartRateMonitor.HeartRateWatchFace == 'true') {\\r\\n messageBody += '0108'; // Face ID 1 \\r\\n} else if (params.StepCounting.StepCountingWatchFace == 'true') {\\r\\n messageBody += '0208'; // Face ID 2\\r\\n} else {\\r\\n messageBody += '0008';\\r\\n} // Default Face ID 0\\r\\n*/\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '1200003A00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709837554},{"Type":1,"NewValue":"{\"Id\":9630,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Watch Face\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable/Disable Step Counting Watch Menu\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710182706},{"Type":1,"NewValue":"{\"Id\":9630,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Watch Face\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable/Disable Step Counting Watch Menu\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":2}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710184170}],"LanguageId":null,"Tags":[]},{"Id":9630,"Group":{"Id":5605,"Name":"Watch Face","Json":{"description":"Watch Face (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Step Counting Watch Face","Json":"{\"name\":\"Step Counting Watch Face\",\"default\":\"\",\"description\":\"Enable/Disable Step Counting Watch Face\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":{"Id":3960,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.8","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set Watch Settings","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 Watch Settings' Only enable y disable:\r\n// params.StepCounting.EnableDisableStepCounting == 'true'\r\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\r\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\r\n// Test enabled both\r\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\r\n// test step on HRT off\r\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test step off HRT on\r\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\r\n// test both off \r\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) , lenght and key\r\nvar messageBody = '021136';\r\n// step count/heart value display\r\n// Watch setting related FACE ID\r\nif (params.WatchFace.SetWatchFace) {\r\n messageBody += params.WatchFace.SetWatchFace; // Face ID \r\n} else {\r\n messageBody += '00'; // Analog Face Default FACE ID 0 \r\n}\r\n/*\r\nif (params.HeartRateMonitor.HeartRateWatchFace == 'true') {\r\n messageBody += '0108'; // Face ID 1 \r\n} else if (params.StepCounting.StepCountingWatchFace == 'true') {\r\n messageBody += '0208'; // Face ID 2\r\n} else {\r\n messageBody += '0008';\r\n} // Default Face ID 0\r\n*/\r\n// Watch setting related to Step and heart rate settings\r\nvar dataSMS = '';\r\nif ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'true')) {\r\n messageBody += '1A00003E00000014000000000000';\r\n} else if ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'false')) {\r\n messageBody += '0A00003C00000014000000000000';\r\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'true')) {\r\n messageBody += '1200003A00000014000000000000';\r\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'false')) {\r\n messageBody += '0200003800000014000000000000';\r\n} else {\r\n messageBody += '0200003800000014000000000000';\r\n}\r\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\r\nif (params.DeviceVersion.DeviceVersion == '1') {\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n heartBeat = '0A';\r\n totalLenght = '0400';\r\n messageBody = command + keyLength + key + heartBeat;\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":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8199,"Group":{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"OTA Update","Json":"{\"name\":\"OTA Update\",\"default\":\"\",\"description\":\"Performs an OTA update\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Sends command to perform OTA update\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":5009,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.8","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"TriggerOTA","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// Trigger OTA\r\nvar 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 value for URL\r\nvar value = 'http://35.180.127.121:5800/fi_ota';\r\nvar value = ascii_to_hexa(value).toUpperCase();\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\n// control command\r\nvar command = '04';\r\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\r\nvar key = '30';\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLenght = changeEndianness(totalLenght);\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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11290,"Group":{"Id":5522,"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":[]},"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\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Retrieve the current firmware version from the device\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":11290,\"Group\":{\"Id\":5522,\"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\":[]},\"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\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Retrieve the current firmware version from the device\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718360523},{"Type":0,"NewValue":"{\"Id\":11290,\"Group\":{\"Id\":5522,\"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\":[]},\"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\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Retrieve the current firmware version from the device\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":3307,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.8\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Get Firmware version\",\"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 = '02'; //Ask for firmware\\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\\n// Check always the full length\\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},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718360533},{"Type":1,"NewValue":"{\"Id\":11290,\"Group\":{\"Id\":5522,\"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\":[]},\"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\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Retrieve the current firmware version from the device\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718618533}],"LanguageId":null,"Tags":[]},{"Id":11290,"Group":{"Id":5522,"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":[]},"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\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Retrieve the current firmware version from the device\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":3307,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.8","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Get Firmware version","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 = '02'; //Ask for firmware\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\n// Check always the full length\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},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11291,"Group":{"Id":5522,"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":[]},"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":[{"Type":0,"NewValue":"{\"Id\":11291,\"Group\":{\"Id\":5522,\"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\":[]},\"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\":[],\"Tags\":[]}","Timestamp":1718360702},{"Type":1,"NewValue":"{\"Id\":11291,\"Group\":{\"Id\":5522,\"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\":[]},\"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\\\"],\\\"order\\\":2}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718618542},{"Type":1,"NewValue":"{\"Id\":11291,\"Group\":{\"Id\":5522,\"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\":[]},\"Name\":\"Current Firmware Version\",\"Json\":\"{\\\"name\\\":\\\"Current Firmware Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Firmware Version Short\\\",\\\"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\":[],\"Tags\":[]}","Timestamp":1718818053}],"LanguageId":null,"Tags":[]},{"Id":11316,"Group":{"Id":5522,"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":[]},"Name":"Current Firmware Version Long","Json":"{\"name\":\"Current Firmware Version Long\",\"default\":\"\",\"description\":\"Current Firmware Version Long\",\"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":0,"NewValue":"{\"Id\":11316,\"Group\":{\"Id\":5522,\"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\":[]},\"Name\":\"Current Firmware Version Long\",\"Json\":\"{\\\"name\\\":\\\"Current Firmware Version Long\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Firmware Version Long\\\",\\\"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\":[],\"Tags\":[]}","Timestamp":1718818112}],"LanguageId":null,"Tags":[]},{"Id":8120,"Group":{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Cycle Interval","Json":"{\"name\":\"Cycle Interval\",\"default\":\"\",\"description\":\"Cycle Interval\",\"type\":\"number\",\"suffix\":\"minutes\",\"prefix\":null,\"min\":1,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The interval the Rio will send regular updates to IntelliCare\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":3317,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"3.0","FirmwareVersion":"V04b.8601.2406.1.0.16.4411.2406.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Working Mode","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 localTesting = false;\r\nif (localTesting) var params = {\r\n 'CycleInterval': {\r\n 'CycleInterval': 10,\r\n 'LazyCycleInterval': 60\r\n },\r\n 'WorkingMode': {\r\n 'Mode': '06'\r\n }\r\n};\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// Select Communicate behaviour of the Rio.\r\n// Cycle = C; Heartbeat = H; Lazy Cycle = LC. \r\n//Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\r\n// load parameters Cycle interval and Lazy cycle interval\r\nif (params.CycleInterval.CycleInterval) {\r\n var cycleInterval = parseInt(params.CycleInterval.CycleInterval) * 60;\r\n} else var cycleInterval = 600;\r\nif (params.CycleInterval.LazyCycleInterval) {\r\n var lazyCycleInterval = parseInt(params.CycleInterval.LazyCycleInterval) * 60;\r\n} else var lazyCycleInterval = 3600;\r\n// Check selected working mode\r\nif (params.WorkingMode.Mode) {\r\n var mode = params.WorkingMode.Mode;\r\n} else {\r\n var mode = '06';\r\n} // default mode 6\r\n// improve command to add both GPRS and SMS comunication\r\nswitch (mode) {\r\n case '02':\r\n case '06':\r\n var value = '000000'; // Time interval to zero\r\n var valueSMS = ',' + cycleInterval / 60 + 'M,' + lazyCycleInterval / 60 + 'M';\r\n break;\r\n case '03':\r\n var value = '000000'; // Time interval to zero\r\n var valueSMS = ',' + cycleInterval / 60 + 'M';\r\n break;\r\n case '04':\r\n case '05': // add time interval to the command\r\n if (cycleInterval) {\r\n var value = parseInt(cycleInterval);\r\n value = decimalToHex(value);\r\n value = ('000000' + value).slice(-6).toUpperCase();\r\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\r\n var valueSMS = ',' + cycleInterval / 60 + 'M';\r\n } else {\r\n var value = 60 * 60; // default value 60*60 seconds\r\n value = decimalToHex(value);\r\n value = ('000000' + value).slice(-6).toUpperCase();\r\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\r\n var valueSMS = ',' + 60 + 'M';\r\n }\r\n break;\r\n default:\r\n var value = '000000'; // Time interval to zero\r\n var valueSMS = '';\r\n}\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '05';\r\nvar key = '0A';\r\nvar messageBody = command + keyLength + key + value + mode;\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' + '0700' + 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 = 'mode' + mode.substring(1) + valueSMS;\r\nAddValueSMS('dataSMS', dataSMS);\r\ndebug(data);\r\ndebug(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 debug(str) { // write debug info to console log, if localTesting\r\n if (localTesting === \"True\") {\r\n console.log(str);\r\n }\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":2,"Order":2},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[{"Id":1714,"Name":"cycleInterval","BackendAction":"cycleInterval","Value":""}]},{"Id":8197,"Group":{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Mode","Json":"{\"name\":\"Mode\",\"default\":\"\",\"description\":\"Different modes for communication\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Select Communicate behaviour of the Rio. Cycle = C; Heartbeat = H; Lazy Cycle = LC. Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\",\"options\":[{\"value\":\"01\",\"label\":\"M1: No Cycles until alarm is triggered\"},{\"value\":\"02\",\"label\":\"M2: Always stay online, Location only on movement\"},{\"value\":\"03\",\"label\":\"M3: Always online, Location only on movement, no lazy cycle\"},{\"value\":\"04\",\"label\":\"M4: Only lazy cycles; Location only on lazy cycle.\"},{\"value\":\"05\",\"label\":\"M5: Only lazy cycles, GSM/GPRS/Location off between cycles\"},{\"value\":\"06\",\"label\":\"M6: (default) Sends data on regular cycles, Location only on movement\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":{"Id":3327,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"3.0","FirmwareVersion":"V04b.8601.2406.1.0.16.4411.2406.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Cycle","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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":3},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":12381,"Group":{"Id":7436,"Name":"Convert Device","Json":{"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":"Profile","Json":"{\"name\":\"Profile\",\"default\":\"\",\"description\":\"Choose Profile\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Select profile to convert the device\",\"options\":[{\"label\":\"Roam\",\"value\":\"04\"},{\"label\":\"Sentry\",\"value\":\"64\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":12381,\"Group\":{\"Id\":7436,\"Name\":\"Convert Device\",\"Json\":{\"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\":\"Profile\",\"Json\":\"{\\\"name\\\":\\\"Profile\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Choose Profile\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select profile to convert the device\\\",\\\"options\\\":[{\\\"label\\\":\\\"Roam\\\",\\\"value\\\":\\\"04\\\"},{\\\"label\\\":\\\"Sentry\\\",\\\"value\\\":\\\"64\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1753800289},{"Type":1,"NewValue":"{\"Id\":12381,\"Group\":{\"Id\":7436,\"Name\":\"Convert Device\",\"Json\":{\"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\":\"Profile\",\"Json\":\"{\\\"name\\\":\\\"Profile\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Choose Profile\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select profile to convert the device\\\",\\\"options\\\":[{\\\"value\\\":\\\"04\\\",\\\"label\\\":\\\"Roam\\\"},{\\\"value\\\":\\\"64\\\",\\\"label\\\":\\\"Sentry\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1753801474},{"Type":0,"NewValue":"{\"Id\":12381,\"Group\":{\"Id\":7436,\"Name\":\"Convert Device\",\"Json\":{\"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\":\"Profile\",\"Json\":\"{\\\"name\\\":\\\"Profile\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Choose Profile\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select profile to convert the device\\\",\\\"options\\\":[{\\\"value\\\":\\\"04\\\",\\\"label\\\":\\\"Roam\\\"},{\\\"value\\\":\\\"64\\\",\\\"label\\\":\\\"Sentry\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":5811,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"3.6\",\"FirmwareVersion\":\"V04b.8601.2406.1.0.16.4411.2406.25\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"setCustomId\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// setCustomId\\r\\n// ConvertDevice.Profile\\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 configs = [];\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar key = '47';\\r\\nif (params.ConvertDevice.Profile == 'Rio') {\\r\\n var keyLength = '02';\\r\\n var customID = '04';\\r\\n var totalLenght = '0400';\\r\\n} else if (params.ConvertDevice.Profile == 'Roam') {\\r\\n var keyLength = '02';\\r\\n var customID = '64';\\r\\n var totalLenght = '0400';\\r\\n} else {\\r\\n var keyLength = '01';\\r\\n var customID = '';\\r\\n var totalLenght = '0300';\\r\\n}\\r\\nvar messageBody = command + keyLength + key + customID;\\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' + totalLenght + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\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\":null},\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1753801478},{"Type":2,"NewValue":"{\"Id\":12381,\"Group\":{\"Id\":7436,\"Name\":\"Convert Device\",\"Json\":{\"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\":\"Profile\",\"Json\":\"{\\\"name\\\":\\\"Profile\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Choose Profile\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select profile to convert the device\\\",\\\"options\\\":[{\\\"value\\\":\\\"04\\\",\\\"label\\\":\\\"Roam\\\"},{\\\"value\\\":\\\"64\\\",\\\"label\\\":\\\"Sentry\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1761240137}],"LanguageId":null,"Tags":[]},{"Id":12381,"Group":{"Id":7436,"Name":"Convert Device","Json":{"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":"Profile","Json":"{\"name\":\"Profile\",\"default\":\"\",\"description\":\"Choose Profile\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Select profile to convert the device\",\"options\":[{\"value\":\"04\",\"label\":\"Roam\"},{\"value\":\"64\",\"label\":\"Sentry\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":{"Id":5811,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"3.6","FirmwareVersion":"V04b.8601.2406.1.0.16.4411.2406.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"setCustomId","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// setCustomId\r\n// ConvertDevice.Profile\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 configs = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar key = '47';\r\nif (params.ConvertDevice.Profile == 'Rio') {\r\n var keyLength = '02';\r\n var customID = '04';\r\n var totalLenght = '0400';\r\n} else if (params.ConvertDevice.Profile == 'Roam') {\r\n var keyLength = '02';\r\n var customID = '64';\r\n var totalLenght = '0400';\r\n} else {\r\n var keyLength = '01';\r\n var customID = '';\r\n var totalLenght = '0300';\r\n}\r\nvar messageBody = command + keyLength + key + customID;\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' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\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":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]}],"ProtocolChanges":[{"Version":"2.4","UserName":"Andy-Superadmin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Updated operation ","Timestamp":1694412468},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"ACK-RST","Message":"(Delete) (ACK-RST)","Timestamp":1694504639},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"CYC","Message":"(Delete) (CYC)","Timestamp":1694504710},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"CHK","Message":"(Update) (CHK) Add signal strenght and work mode","Timestamp":1694505577},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"COMM-STP","Message":"(Create) (COMM-STP) Receive step counting from watch","Timestamp":1694505682},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"CYC","Message":"(Update) (CYC) change workmode variable name","Timestamp":1694505829},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"CYC-BUF","Message":"(Delete) (CYC-BUF)","Timestamp":1694505881},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"CYC-BUF","Message":"(Delete) (CYC-BUF)","Timestamp":1694505892},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"CYC-BUFF","Message":"(Delete) (CYC-BUFF)","Timestamp":1694505905},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"HRT","Message":"(Update) (HRT) Add Event time and Trust Level","Timestamp":1694506002},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Device Reboot","Message":"(Update) (Device Reboot) Add SMS command","Timestamp":1694506441},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"APN","Message":"(Update) (APN) set priority","Timestamp":1694506496},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Continuous Locate","Message":"(Update) (Continuous Locate) set priority","Timestamp":1694506592},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Continuous Locate","Message":"(Update) (Continuous Locate) set priority","Timestamp":1694506608},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Cycle","Message":"(Update) (Cycle) set priority","Timestamp":1694506673},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Enable Control","Message":"(Update) (Enable Control) set priority","Timestamp":1694506753},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Extra Enable Control","Message":"(Update) (Extra Enable Control) set priority command","Timestamp":1694506789},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Enable Control","Message":"(Update) (Enable Control) set priority","Timestamp":1694506831},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Factory Reset","Message":"(Update) (Factory Reset) Add SMS command","Timestamp":1694506940},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Heart Rate Detecting Interval","Message":"(Create) (Heart Rate Detecting Interval) Create Command","Timestamp":1694507189},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Server","Message":"(Update) (Server) set priority","Timestamp":1694507326},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Step Collect Settings","Message":"(Create) (Step Collect Settings) create command","Timestamp":1694507472},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Welfare Check","Message":"(Update) (Welfare Check) change send attempts to 25","Timestamp":1694507593},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Working Mode","Message":"(Update) (Working Mode) set priority","Timestamp":1694507637},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable Heart Rate Monitor","Message":"(Create) (Enable Disable Heart Rate Monitor) new param","Timestamp":1694507749},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable Heart Rate Monitor","Message":"Associate groupParam Enable Disable Heart Rate Monitor to command Heart Rate Detecting Interval","Timestamp":1694507754},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Detecting Interval","Message":"(Create) (Heart Rate Detecting Interval) create param","Timestamp":1694507804},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Detecting Interval","Message":"Associate groupParam Heart Rate Detecting Interval to command Heart Rate Detecting Interval","Timestamp":1694507810},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Step Counting","Message":"(Create) (Step Counting) create group","Timestamp":1694507879},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable Step Counting","Message":"(Create) (Enable Disable Step Counting) create param","Timestamp":1694507929},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable Step Counting","Message":"Associate groupParam Enable Disable Step Counting to command Step Collect Settings","Timestamp":1694507935},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Step Counting Interval","Message":"(Create) (Step Counting Interval) create param","Timestamp":1694507992},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Step Counting Interval","Message":"Associate groupParam Step Counting Interval to command Step Collect Settings","Timestamp":1694507997},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Step Counting","Message":"(Update) (Step Counting) Reorder Groups","Timestamp":1694508080},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Device Version","Message":"(Update) (Device Version) Reorder Groups","Timestamp":1694508083},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"No Activity","Message":"(Update) (No Activity) Reorder Groups","Timestamp":1694508086},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Voice Prompt","Message":"(Update) (Voice Prompt) Reorder Groups","Timestamp":1694508090},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Update Firmware","Message":"(Update) (Update Firmware) Reorder Groups","Timestamp":1694508094},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"SMS Prefix","Message":"(Update) (SMS Prefix) Reorder Groups","Timestamp":1694508098},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Server","Message":"(Update) (Server) Reorder Groups","Timestamp":1694508103},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Set APN","Message":"(Update) (Set APN) Reorder Groups","Timestamp":1694508107},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Request Location","Message":"(Update) (Request Location) Reorder Groups","Timestamp":1694508110},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"SMS Password","Message":"(Update) (SMS Password) Reorder Groups","Timestamp":1694508114},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Enable Control","Message":"(Update) (Enable Control) Reorder Groups","Timestamp":1694508117},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Working Mode","Message":"(Update) (Working Mode) Reorder Groups","Timestamp":1694508121},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Cycle Interval","Message":"(Update) (Cycle Interval) Reorder Groups","Timestamp":1694508126},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Continuous Locate","Message":"(Update) (Continuous Locate) Reorder Groups","Timestamp":1694508129},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"System Language","Message":"(Update) (System Language) Reorder Groups","Timestamp":1694508133},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Delete Records","Message":"(Update) (Delete Records) Reorder Groups","Timestamp":1694508137},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Factory Reset","Message":"(Update) (Factory Reset) Reorder Groups","Timestamp":1694508140},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Device Reboot","Message":"(Update) (Device Reboot) Reorder Groups","Timestamp":1694508144},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Power Off","Message":"(Update) (Power Off) Reorder Groups","Timestamp":1694508148},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable Enable Control","Message":"(Create) (Enable Disable Enable Control) create param","Timestamp":1694508203},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable Enable Control","Message":"Associate groupParam Enable Disable Enable Control to command Enable Control","Timestamp":1694508209},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Enable Control","Message":"(Update) (Enable Control) Add Step Counting Function Enabler","Timestamp":1694508263},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Enable Control","Message":"(Update) (Enable Control) Reorder Groups","Timestamp":1694508340},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"SMS Password","Message":"(Update) (SMS Password) Reorder Groups","Timestamp":1694508344},{"Version":"2.4","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) update to 2.4 (add HRT and Step Counting + other features)","Timestamp":1694508502},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Phone Settings","Message":"(Update) (Phone Settings) Add silent mode","Timestamp":1694531081},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Speed Dial Number","Message":"(Update) (Speed Dial Number) commentary","Timestamp":1694532262},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"HRT","Message":"(Update) (HRT) add Label","Timestamp":1694533036},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"COMM-STP","Message":"(Update) (COMM-STP) add label","Timestamp":1694533081},{"Version":"2.4","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Add labels to HRT and STP counting","Timestamp":1694533336},{"Version":"2.4","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Reset alarm value after transmit the oysta template","Timestamp":1694599053},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Continuous Locate","Message":"(Update) (Continuous Locate) Ack issue test","Timestamp":1694692011},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Cycle","Message":"(Update) (Cycle) Ack issue test","Timestamp":1694692025},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Enable Control","Message":"(Update) (Enable Control) Ack issue test","Timestamp":1694692073},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Extra Enable Control","Message":"(Update) (Extra Enable Control) Ack issue test","Timestamp":1694692100},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Fall Down Alert","Message":"(Update) (Fall Down Alert) Ack issue test","Timestamp":1694692118},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Heart Rate Detecting Interval","Message":"(Update) (Heart Rate Detecting Interval) Ack issue test","Timestamp":1694692140},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Phone Settings","Message":"(Update) (Phone Settings) Ack issue test","Timestamp":1694692178},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Power Alert","Message":"(Update) (Power Alert) Ack issue test","Timestamp":1694692202},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"RingTone Volume","Message":"(Update) (RingTone Volume) Ack issue test","Timestamp":1694692228},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set SOS Number","Message":"(Update) (Set SOS Number) Ack issue test","Timestamp":1694692256},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"SOS Button Settings","Message":"(Update) (SOS Button Settings) Ack issue test","Timestamp":1694692287},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"SOS Option","Message":"(Update) (SOS Option) Ack issue test","Timestamp":1694692312},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Speaker Volume","Message":"(Update) (Speaker Volume) Ack issue test","Timestamp":1694692359},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Speed Dial","Message":"(Update) (Speed Dial) Ack issue test","Timestamp":1694692383},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Step Collect Settings","Message":"(Update) (Step Collect Settings) Ack issue test","Timestamp":1694692405},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Tilt Alert","Message":"(Update) (Tilt Alert) Ack issue test","Timestamp":1694692419},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"ENC-2","Message":"(Update) (ENC-2) Insert \"[[]]\" for handle multi-ack msgs","Timestamp":1694709634},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Step","Message":"(Create) (Step) Add Step Counting","Timestamp":1694716249},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Step","Message":"Associate groupParam Step to command Enable Control","Timestamp":1694716254},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Heart Rate Detecting Interval","Message":"(Update) (Heart Rate Detecting Interval) if it is not a watch send dummy msg to set up mic volume to 10","Timestamp":1694765236},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Step Collect Settings","Message":"(Update) (Step Collect Settings) if it is not a watch, sends dummy msg to set up mic volume to 10","Timestamp":1694765286},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Factory Reset","Message":"(Update) (Factory Reset) Add option for factory reset by SMS for the watch","Timestamp":1694765370},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"ENC-2","Message":"(Update) (ENC-2) Delete [[]]. multiple acks will be implemented in operations code","Timestamp":1694769070},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"COMM-STP","Message":"(Update) (COMM-STP) change to alarm","Timestamp":1694775990},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"STP","Message":"(Update) (STP) change MSGcode to STEP","Timestamp":1694776570},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"STP","Message":"(Update) (STP) change to alarm","Timestamp":1694791307},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Working Mode","Message":"(Update) (Working Mode) Modify command to send by SMS, and remove intervalTime parameter.","Timestamp":1694865115},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"ACK-RST","Message":"(Update) (ACK-RST) Add oysta Template for Spanish ACK","Timestamp":1695719096},{"Version":"2.4","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Add MultiACK Handler","Timestamp":1695751192},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Alarm Clock 1","Message":"(Update) (Alarm Clock 1) multi Ack change to 2 ","Timestamp":1695907904},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Alarm Clock 2","Message":"(Update) (Alarm Clock 2) multi Ack change to 2 ","Timestamp":1695907928},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Alarm Clock 3","Message":"(Update) (Alarm Clock 3) multi Ack change to 2 ","Timestamp":1695907948},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Alarm Clock 4","Message":"(Update) (Alarm Clock 4) multi Ack change to 2 ","Timestamp":1695907970},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"ASet SMS Prefix","Message":"(Update) (ASet SMS Prefix) multi Ack change to 2 ","Timestamp":1695907993},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 1","Message":"(Update) (Beacon 1) multi Ack change to 2 ","Timestamp":1695908009},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 10","Message":"(Update) (Beacon 10) multi Ack change to 2 ","Timestamp":1695908059},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 2","Message":"(Update) (Beacon 2) multi Ack change to 2 ","Timestamp":1695908074},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 3","Message":"(Update) (Beacon 3) multi Ack change to 2 ","Timestamp":1695908094},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 4","Message":"(Update) (Beacon 4) multi Ack change to 2 ","Timestamp":1695908112},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 5","Message":"(Update) (Beacon 5) multi Ack change to 2 ","Timestamp":1695908127},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 6","Message":"(Update) (Beacon 6) multi Ack change to 2 ","Timestamp":1695908144},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 7","Message":"(Update) (Beacon 7) multi Ack change to 2 ","Timestamp":1695908162},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 8","Message":"(Update) (Beacon 8) multi Ack change to 2 ","Timestamp":1695908211},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 9","Message":"(Update) (Beacon 9) multi Ack change to 2 ","Timestamp":1695908231},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Continuous Locate","Message":"(Update) (Continuous Locate) multi Ack change to 2 ","Timestamp":1695908255},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Cycle","Message":"(Update) (Cycle) multi Ack change to 2 ","Timestamp":1695908282},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Delete Records","Message":"(Update) (Delete Records) multi Ack change to 2 ","Timestamp":1695908318},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Device Reboot","Message":"(Update) (Device Reboot) multi Ack change to 2 ","Timestamp":1695908342},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Enable Control","Message":"(Update) (Enable Control) multi Ack change to 2 ","Timestamp":1695908366},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Extra Enable Control","Message":"(Update) (Extra Enable Control) multi Ack change to 2 ","Timestamp":1695908390},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Factory Reset","Message":"(Update) (Factory Reset) multi Ack change to 2 ","Timestamp":1695908410},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Fall Down Alert","Message":"(Update) (Fall Down Alert) multi Ack change to 2 ","Timestamp":1695908430},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Find Device","Message":"(Update) (Find Device) multi Ack change to 2 ","Timestamp":1695908450},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Get Firmware version","Message":"(Update) (Get Firmware version) multi Ack change to 2 ","Timestamp":1695908473},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Heart Rate Detecting Interval","Message":"(Update) (Heart Rate Detecting Interval) multi Ack change to 2 ","Timestamp":1695908488},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Initialize Mileage","Message":"(Update) (Initialize Mileage) multi Ack change to 2 ","Timestamp":1695908503},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Mic Volume","Message":"(Update) (Mic Volume) multi Ack change to 2 ","Timestamp":1695908524},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Motion Alert","Message":"(Update) (Motion Alert) multi Ack change to 2 ","Timestamp":1695908563},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"No Disturb","Message":"(Update) (No Disturb) multi Ack change to 2 ","Timestamp":1695908583},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"No Motion Alert","Message":"(Update) (No Motion Alert) multi Ack change to 2 ","Timestamp":1695908608},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Over Speed Alert","Message":"(Update) (Over Speed Alert) multi Ack change to 2 ","Timestamp":1695908623},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Phone Settings","Message":"(Update) (Phone Settings) multi Ack change to 2 ","Timestamp":1695908646},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Power Alert","Message":"(Update) (Power Alert) multi Ack change to 2 ","Timestamp":1695908668},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Power Off","Message":"(Update) (Power Off) multi Ack change to 2 ","Timestamp":1695908691},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Request Location","Message":"(Update) (Request Location) multi Ack change to 2 ","Timestamp":1695908709},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"RingTone Volume","Message":"(Update) (RingTone Volume) multi Ack change to 2 ","Timestamp":1695908725},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set Authorised Number 1","Message":"(Update) (Set Authorised Number 1) multi Ack change to 2 ","Timestamp":1695908749},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set Authorised Number 2","Message":"(Update) (Set Authorised Number 2) multi Ack change to 2 ","Timestamp":1695908771},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set Authorised Number 3","Message":"(Update) (Set Authorised Number 3) multi Ack change to 2 ","Timestamp":1695908787},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set Authorised Number 4","Message":"(Update) (Set Authorised Number 4) multi Ack change to 2 ","Timestamp":1695908804},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set Authorised Number 5","Message":"(Update) (Set Authorised Number 5) multi Ack change to 2 ","Timestamp":1695908820},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set Authorised Number 6","Message":"(Update) (Set Authorised Number 6) multi Ack change to 2 ","Timestamp":1695908837},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set Authorised Number 7","Message":"(Update) (Set Authorised Number 7) multi Ack change to 2 ","Timestamp":1695908858},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set Authorised Number 8","Message":"(Update) (Set Authorised Number 8) multi Ack change to 2 ","Timestamp":1695908883},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set Oysta Number","Message":"(Update) (Set Oysta Number) multi Ack change to 2 ","Timestamp":1695908900},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set SOS Number","Message":"(Update) (Set SOS Number) multi Ack change to 2 ","Timestamp":1695908924},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set System Language","Message":"(Update) (Set System Language) multi Ack change to 2 ","Timestamp":1695908946},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"SMS Password","Message":"(Update) (SMS Password) multi Ack change to 2 ","Timestamp":1695908977},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"SOS Button Settings","Message":"(Update) (SOS Button Settings) multi Ack change to 2 ","Timestamp":1695908998},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"SOS Option","Message":"(Update) (SOS Option) multi Ack change to 2 ","Timestamp":1695909019},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Speaker Volume","Message":"(Update) (Speaker Volume) multi Ack change to 2 ","Timestamp":1695909040},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Speed Dial","Message":"(Update) (Speed Dial) multi Ack change to 2 ","Timestamp":1695909062},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Speed Dial Number","Message":"(Update) (Speed Dial Number) multi Ack change to 2 ","Timestamp":1695909094},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Step Collect Settings","Message":"(Update) (Step Collect Settings) multi Ack change to 2 ","Timestamp":1695909108},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Step Collect Settings","Message":"(Update) (Step Collect Settings) multi Ack change to 2 ","Timestamp":1695909133},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Step Collect Settings","Message":"(Update) (Step Collect Settings) multi Ack change to 2 ","Timestamp":1695909154},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Tilt Alert","Message":"(Update) (Tilt Alert) multi Ack change to 2 ","Timestamp":1695909174},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Voice Prompt","Message":"(Update) (Voice Prompt) multi Ack change to 2 ","Timestamp":1695909245},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Voice Prompt Volume","Message":"(Update) (Voice Prompt Volume) multi Ack change to 2 ","Timestamp":1695909306},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Welfare Check","Message":"(Update) (Welfare Check) multi Ack change to 2 ","Timestamp":1695909332},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Working Mode","Message":"(Update) (Working Mode) multi Ack change to 2 ","Timestamp":1695909366},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 9","Message":"(Update) (Beacon 9) multi Ack change to 2 ","Timestamp":1695909400},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Enable Control","Message":"(Update) (Enable Control) multi Ack change to 2 ","Timestamp":1695909438},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Find Device","Message":"(Update) (Find Device) multi Ack change to 2 ","Timestamp":1695909472},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set SOS Number","Message":"(Update) (Set SOS Number) multi Ack change to 2 ","Timestamp":1695909519},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Cycle","Message":"(Update) (Cycle) multi Ack test","Timestamp":1695910701},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Cycle","Message":"(Update) (Cycle) multi Ack test","Timestamp":1695910765},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Cycle","Message":"(Update) (Cycle) multi ack test","Timestamp":1695910798},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set SOS Number","Message":"(Update) (Set SOS Number) multi ack test needs to be 4","Timestamp":1695911435},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"SOS Button Settings","Message":"(Update) (SOS Button Settings) needs to be 4 for multi ","Timestamp":1695911479},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"SOS Option","Message":"(Update) (SOS Option) multi ack test ","Timestamp":1695911521},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Welfare Check","Message":"(Update) (Welfare Check) multi Ack test 4","Timestamp":1695911565},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Cycle","Message":"(Update) (Cycle) multi Ack test 4","Timestamp":1695911874},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Continuous Locate","Message":"(Update) (Continuous Locate) multi Ack test 4","Timestamp":1695912146},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Enable Control","Message":"(Update) (Enable Control) multi Ack test 4","Timestamp":1695912175},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"SOS Button Settings","Message":"(Update) (SOS Button Settings) multi ack test ","Timestamp":1695913764},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set SOS Number","Message":"(Update) (Set SOS Number) multi ack test ","Timestamp":1695913790},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Speed Dial","Message":"(Update) (Speed Dial) changed speed hopefull last one ","Timestamp":1695935979},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Speed Dial Number","Message":"(Update) (Speed Dial Number) chaged to 4 to help with ack","Timestamp":1695936022},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Step Collect Settings","Message":"(Update) (Step Collect Settings) step to 4 from 2","Timestamp":1695937625},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Heart Rate Detecting Interval","Message":"(Update) (Heart Rate Detecting Interval) step to 4 from 2","Timestamp":1695937689},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Heart Rate Detecting Interval","Message":"(Update) (Heart Rate Detecting Interval) step to 6 from 4","Timestamp":1695938172},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Step Collect Settings","Message":"(Update) (Step Collect Settings) step to 4 from 2","Timestamp":1695938206},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Fall Down Alert","Message":"(Update) (Fall Down Alert) step to 4 from 2","Timestamp":1695939148},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Phone Settings","Message":"(Update) (Phone Settings) step to 4 from 2","Timestamp":1695939190},{"Version":"2.4","UserName":"juanmi","Resource":"Operation","Name":"OnUpdateProtocol_EView","Message":"(Create) (OnUpdateProtocol_EView) Define first version of configsToUpdate for OnUpdateProtocol","Timestamp":1696071788},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"ACK-RBT","Message":"(Update) (ACK-RBT) Add Spanish ACK msg","Timestamp":1696072379},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Cycle Interval","Message":"(Update) (Cycle Interval) Define tag cycleInterval","Timestamp":1696074130},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Working Mode","Message":"(Update) (Working Mode) Change default to SMS","Timestamp":1696074187},{"Version":"2.4","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Create decode function to parse multiACKs","Timestamp":1696354222},{"Version":"2.4","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Fix answer ACK for cycle msg","Timestamp":1696370464},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable No Activity","Message":"(Update) (Enable Disable No Activity) noActivityActivate","Timestamp":1696371636},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"No Activity","Message":"(Update) (No Activity) noActivityInterval Tag","Timestamp":1696371709},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Power Alert","Message":"(Update) (Power Alert) multi ack","Timestamp":1696443168},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Fall Down Alert","Message":"(Update) (Fall Down Alert) multi ack","Timestamp":1696443207},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Speed Dial","Message":"(Update) (Speed Dial) multi ack","Timestamp":1696443459},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Speed Dial Number","Message":"(Update) (Speed Dial Number) multi ack","Timestamp":1696443499},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"ACK-SRV","Message":"(Update) (ACK-SRV) add Spanish translation","Timestamp":1696493376},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"ACK-APN","Message":"(Update) (ACK-APN) add Spanish translation","Timestamp":1696493432},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Welfare Check","Message":"(Update) (Welfare Check) Add fake command (mic to 10) when device is watch EV05","Timestamp":1696607872},{"Version":"2.4","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Add Beacon V2 support (0x2C) Decode in command type 01","Timestamp":1696787161},{"Version":"2.4","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Decode Step/HRT and cycle in the same msg","Timestamp":1696862342},{"Version":"2.4","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Add Heart rate and step counting labels to event widget.\nAdd SMS command for Device Reboot.\nSet priority order for main commands.\nAdd SMS command fo Factory reset.\nNew command and group to setup Heart Rate Detecting Interval.\nNew command and group to setup Heart Step Collecting Settings.\nAdd checkbox in \"enable control\" group to Enable/disable step counting fuction.\nAdd Silent Mode in Phone Settings.","Timestamp":1696924665},{"Version":"2.5","UserName":"juanmi","Resource":"Command","Name":"Working Mode","Message":"(Update) (Working Mode) change to default transmission","Timestamp":1697011851},{"Version":"2.5","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Change Working mode command to default communication","Timestamp":1697012164},{"Version":"2.6","UserName":"juanmi","Resource":"Command","Name":"No Disturb","Message":"(Update) (No Disturb) Fix small typo error in params name (DoNotDisturb.)","Timestamp":1698145878},{"Version":"2.6","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Added DoNotDisturb function (FlyMode)","Timestamp":1698316947},{"Version":"2.7","UserName":"Michael_Admin","Resource":"GroupParam","Name":"Set APN","Message":"(Update) (Set APN) checking to see if auto-update is broken ","Timestamp":1700220928},{"Version":"2.7","UserName":"juanmi","Resource":"Group","Name":"WiFi Connect","Message":"(Create) (WiFi Connect) Add group to set WiFi connection details","Timestamp":1706034970},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable WiFi Connect","Message":"(Create) (Enable Disable WiFi Connect) Add Enable Disable WiFi Connect Param","Timestamp":1706035083},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"(Create) (SSID) Add SSID param for WiFi Connect","Timestamp":1706035167},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"(Create) (Password) Add Password param to WiFI Connect","Timestamp":1706035231},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable WiFi Connect","Message":"(Update) (Enable Disable WiFi Connect) Reorder Group Params","Timestamp":1706035435},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"(Update) (SSID) Reorder Group Params","Timestamp":1706035440},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"(Update) (Password) Reorder Group Params","Timestamp":1706035446},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Set WiFi Connect","Message":"(Create) (Set WiFi Connect) Create WiFi Connect Command","Timestamp":1706037441},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable WiFi Connect","Message":"(Update) (Enable Disable WiFi Connect) Assign Command","Timestamp":1706037499},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable WiFi Connect","Message":"Associate groupParam Enable Disable WiFi Connect to command Set WiFi Connect","Timestamp":1706037506},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"(Update) (SSID) Assign Command","Timestamp":1706037524},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"Associate groupParam SSID to command Set WiFi Connect","Timestamp":1706037536},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"(Update) (Password) Assign Command","Timestamp":1706037562},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"Associate groupParam Password to command Set WiFi Connect","Timestamp":1706037567},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Set WiFi Connect","Message":"(Update) (Set WiFi Connect) uncomment configSMS","Timestamp":1706344820},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable WiFi Connect","Message":"(Update) (Enable Disable WiFi Connect) Reorder Group Params","Timestamp":1706344873},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"(Update) (SSID) Reorder Group Params","Timestamp":1706344878},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"(Update) (Password) Reorder Group Params","Timestamp":1706344897},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"(Update) (SSID) add description and help text","Timestamp":1706344967},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"(Update) (Password) add description and help text","Timestamp":1706345031},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable WiFi Connect","Message":"(Update) (Enable Disable WiFi Connect) add description","Timestamp":1706345588},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable WiFi Connect","Message":"(Update) (Enable Disable WiFi Connect) Reorder Group Params","Timestamp":1706345599},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"(Update) (SSID) Reorder Group Params","Timestamp":1706345604},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"(Update) (Password) Reorder Group Params","Timestamp":1706345610},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"(Update) (SSID) add min lenght to 1","Timestamp":1706345663},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"(Update) (Password) add min lenght to 1","Timestamp":1706345679},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"(Update) (SSID) Reorder Group Params","Timestamp":1706345702},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"(Update) (Password) Reorder Group Params","Timestamp":1706345708},{"Version":"2.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Add send Get Timestamp to the device","Timestamp":1706346502},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"(Update) (SSID) No min lenght","Timestamp":1706618108},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"(Update) (Password) No min lenght","Timestamp":1706618124},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"WiFi Connect","Message":"(Update) (WiFi Connect) Reorder Groups","Timestamp":1706784440},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"Request Location","Message":"(Update) (Request Location) Reorder Groups","Timestamp":1706784444},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"Enable Control","Message":"(Update) (Enable Control) Reorder Groups","Timestamp":1706784449},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"SMS Password","Message":"(Update) (SMS Password) Reorder Groups","Timestamp":1706784453},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"Working Mode","Message":"(Update) (Working Mode) Reorder Groups","Timestamp":1706784457},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"Cycle Interval","Message":"(Update) (Cycle Interval) Reorder Groups","Timestamp":1706784461},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"Continuous Locate","Message":"(Update) (Continuous Locate) Reorder Groups","Timestamp":1706784467},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"System Language","Message":"(Update) (System Language) Reorder Groups","Timestamp":1706784471},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"Delete Records","Message":"(Update) (Delete Records) Reorder Groups","Timestamp":1706784476},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"Factory Reset","Message":"(Update) (Factory Reset) Reorder Groups","Timestamp":1706784480},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"Device Reboot","Message":"(Update) (Device Reboot) Reorder Groups","Timestamp":1706784485},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"Power Off","Message":"(Update) (Power Off) Reorder Groups","Timestamp":1706784490},{"Version":"2.7","UserName":"juanmi","Resource":"Operation","Name":"OnUpdateProtocol_EView","Message":"(Update) (OnUpdateProtocol_EView) Add new param: WiFiConnect.EnableDisableWiFiConnect","Timestamp":1707127809},{"Version":"2.7","UserName":"juanmi","Resource":"MessageType","Name":"HRT","Message":"(Update) (HRT) Set event type to Standard ticket: 605442","Timestamp":1707754959},{"Version":"2.7","UserName":"juanmi","Resource":"MessageType","Name":"STP","Message":"(Update) (STP) Set event type to Standard, ticket:605449","Timestamp":1707755016},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Working Mode","Message":"(Update) (Working Mode) Add send by SMS ticket 605414","Timestamp":1707755363},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Working Mode","Message":"(Update) (Working Mode) fix type \"False\" to false","Timestamp":1707850781},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Step Collect Settings","Message":"(Update) (Step Collect Settings) change heartBeat = '0A'; // 10 mic level","Timestamp":1707985331},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Heart Rate Detecting Interval","Message":"(Update) (Heart Rate Detecting Interval) change heartBeat = '0A'; // 10 mic level","Timestamp":1707985360},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Set Watch Settings","Message":"(Create) (Set Watch Settings) Create command Set Watch Settings","Timestamp":1707985821},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable Heart Rate Monitor","Message":"(Update) (Enable Disable Heart Rate Monitor) Add set watch settings command","Timestamp":1707985883},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable Heart Rate Monitor","Message":"Associate groupParam Enable Disable Heart Rate Monitor to command Set Watch Settings","Timestamp":1707985888},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Detecting Interval","Message":"(Update) (Heart Rate Detecting Interval) Add set watch settings command","Timestamp":1707985910},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Detecting Interval","Message":"Associate groupParam Heart Rate Detecting Interval to command Set Watch Settings","Timestamp":1707985915},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable Step Counting","Message":"(Update) (Enable Disable Step Counting) Add set watch settings command","Timestamp":1707985928},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable Step Counting","Message":"Associate groupParam Enable Disable Step Counting to command Set Watch Settings","Timestamp":1707985935},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Step Counting Interval","Message":"(Update) (Step Counting Interval) Add set watch settings command","Timestamp":1707985951},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Step Counting Interval","Message":"Associate groupParam Step Counting Interval to command Set Watch Settings","Timestamp":1707985957},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Heart Rate Detecting Interval","Message":"(Update) (Heart Rate Detecting Interval) define default value","Timestamp":1707986571},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Step Collect Settings","Message":"(Update) (Step Collect Settings) Define default value","Timestamp":1707986618},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Heart Rate Detecting Interval","Message":"(Update) (Heart Rate Detecting Interval) local test code","Timestamp":1707987345},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Step Collect Settings","Message":"(Update) (Step Collect Settings) small typo fix \"spaces in msg\"","Timestamp":1707987941},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Set Watch Settings","Message":"(Update) (Set Watch Settings) Fix error in step off heart on","Timestamp":1708002138},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Set Watch Settings","Message":"(Update) (Set Watch Settings) set var messageBody = '0211360008'; // step count/heart value display","Timestamp":1708011331},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Delete Records","Message":"(Update) (Delete Records) Type send by GPRS","Timestamp":1708013025},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Power Off","Message":"(Update) (Power Off) Define SMS version ticket: 604730","Timestamp":1708014431},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Control Configuration Mode","Message":"(Create) (Control Configuration Mode) New command for configuration mode, ticket: 611088","Timestamp":1708015260},{"Version":"2.7","UserName":"juanmi","Resource":"MessageType","Name":"ACK-HRB-SMS","Message":"(Create) (ACK-HRB-SMS) ACK for Control configuration mode","Timestamp":1708015442},{"Version":"2.7","UserName":"juanmi","Resource":"Group","Name":"Controls","Message":"(Create) (Controls) New group for configuration mode","Timestamp":1708016932},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Configuration Mode","Message":"(Create) (Configuration Mode) Add checkbox configuration mode","Timestamp":1708016984},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Configuration Mode","Message":"Associate groupParam Configuration Mode to command Control Configuration Mode","Timestamp":1708016992},{"Version":"2.7","UserName":"erobu@oysta-technology.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) avoid sending associate if imei is defined or null","Timestamp":1708082493},{"Version":"2.7","UserName":"juanmi","Resource":"Operation","Name":"OnUpdateProtocol_EView","Message":"(Update) (OnUpdateProtocol_EView) Add Controls.ConfigurationMode","Timestamp":1708276363},{"Version":"2.7","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"USER STORY 628198","Timestamp":1708960350},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Watch Face","Message":"(Create) (Heart Rate Watch Face) Add chechbox for Heart Rate Watch Face","Timestamp":1709751249},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Watch Face","Message":"Associate groupParam Heart Rate Watch Face to command Set Watch Settings","Timestamp":1709751289},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Watch Face","Message":"(Update) (Heart Rate Watch Face) Add help text","Timestamp":1709751323},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Step Counting Watch Face","Message":"(Create) (Step Counting Watch Face) Add checkbox Step Counting Watch Face","Timestamp":1709751421},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Step Counting Watch Face","Message":"Associate groupParam Step Counting Watch Face to command Set Watch Settings","Timestamp":1709751462},{"Version":"2.8","UserName":"juanmi","Resource":"Operation","Name":"OnUpdateProtocol_EView","Message":"(Update) (OnUpdateProtocol_EView) Added OnUpdate for StepCounting.StepCountingWatchFace and HeartRateMonitor.HeartRateWatchFace","Timestamp":1709751672},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Set Watch Settings","Message":"(Update) (Set Watch Settings) Add Watch setting related FACE ID","Timestamp":1709752193},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Set Watch Settings","Message":"(Update) (Set Watch Settings) add watch face select 1","Timestamp":1709835912},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Watch Face","Message":"(Create) (Watch Face) Create Watch Face Group","Timestamp":1709836244},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Set Watch Face","Message":"(Create) (Set Watch Face) Select Watch Face (Analog or Digital)","Timestamp":1709836470},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Set Watch Face","Message":"Associate groupParam Set Watch Face to command Set Watch Settings","Timestamp":1709836476},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Set Watch Settings","Message":"(Update) (Set Watch Settings) Add different Watch Face IDs","Timestamp":1709837334},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Watch Face","Message":"(Create) (Heart Rate Watch Face) Add check box Heart Rate Watch Face","Timestamp":1709837461},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Watch Face","Message":"Associate groupParam Heart Rate Watch Face to command Set Watch Settings","Timestamp":1709837469},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Set Watch Face","Message":"(Update) (Set Watch Face) Reorder Group Params","Timestamp":1709837495},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Watch Face","Message":"(Update) (Heart Rate Watch Face) Reorder Group Params","Timestamp":1709837499},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Step Counting Watch Face","Message":"(Create) (Step Counting Watch Face) Add checkbox Step Counting Watch Face","Timestamp":1709837549},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Step Counting Watch Face","Message":"Associate groupParam Step Counting Watch Face to command Set Watch Settings","Timestamp":1709837554},{"Version":"2.8","UserName":"juanmi","Resource":"Operation","Name":"OnUpdateProtocol_EView","Message":"(Update) (OnUpdateProtocol_EView) Add default for WatchFace.SetWatchFace","Timestamp":1709837697},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Set Watch Settings","Message":"(Update) (Set Watch Settings) minor fix","Timestamp":1709838700},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Set Watch Settings","Message":"(Update) (Set Watch Settings) Add control to show // hide Step and Heart Menus","Timestamp":1710174590},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Watch Face","Message":"(Update) (Watch Face) Reorder Groups","Timestamp":1710182468},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Heart Rate Monitor","Message":"(Update) (Heart Rate Monitor) Reorder Groups","Timestamp":1710182472},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Step Counting","Message":"(Update) (Step Counting) Reorder Groups","Timestamp":1710182509},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Device Version","Message":"(Update) (Device Version) Reorder Groups","Timestamp":1710182514},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"No Activity","Message":"(Update) (No Activity) Reorder Groups","Timestamp":1710182518},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Voice Prompt","Message":"(Update) (Voice Prompt) Reorder Groups","Timestamp":1710182523},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Update Firmware","Message":"(Update) (Update Firmware) Reorder Groups","Timestamp":1710182528},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"SMS Prefix","Message":"(Update) (SMS Prefix) Reorder Groups","Timestamp":1710182533},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Server","Message":"(Update) (Server) Reorder Groups","Timestamp":1710182538},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Set APN","Message":"(Update) (Set APN) Reorder Groups","Timestamp":1710182542},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"WiFi Connect","Message":"(Update) (WiFi Connect) Reorder Groups","Timestamp":1710182547},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Request Location","Message":"(Update) (Request Location) Reorder Groups","Timestamp":1710182551},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Enable Control","Message":"(Update) (Enable Control) Reorder Groups","Timestamp":1710182555},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"SMS Password","Message":"(Update) (SMS Password) Reorder Groups","Timestamp":1710182560},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Working Mode","Message":"(Update) (Working Mode) Reorder Groups","Timestamp":1710182564},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Cycle Interval","Message":"(Update) (Cycle Interval) Reorder Groups","Timestamp":1710182568},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Continuous Locate","Message":"(Update) (Continuous Locate) Reorder Groups","Timestamp":1710182572},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"System Language","Message":"(Update) (System Language) Reorder Groups","Timestamp":1710182576},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Delete Records","Message":"(Update) (Delete Records) Reorder Groups","Timestamp":1710182579},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Factory Reset","Message":"(Update) (Factory Reset) Reorder Groups","Timestamp":1710182584},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Device Reboot","Message":"(Update) (Device Reboot) Reorder Groups","Timestamp":1710182588},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Power Off","Message":"(Update) (Power Off) Reorder Groups","Timestamp":1710182593},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Watch Face","Message":"(Update) (Heart Rate Watch Face) change description","Timestamp":1710182685},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Step Counting Watch Face","Message":"(Update) (Step Counting Watch Face) change description","Timestamp":1710182706},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Watch Face","Message":"(Update) (Heart Rate Watch Face) Reorder Group Params","Timestamp":1710184165},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Step Counting Watch Face","Message":"(Update) (Step Counting Watch Face) Reorder Group Params","Timestamp":1710184170},{"Version":"2.8","UserName":"oysta@superadmin.com","Resource":"GroupParam","Name":"Heart Rate Watch Face","Message":"(Delete) (Heart Rate Watch Face)","Timestamp":1710351065},{"Version":"2.8","UserName":"oysta@superadmin.com","Resource":"GroupParam","Name":"Step Counting Watch Face","Message":"(Delete) (Step Counting Watch Face)","Timestamp":1710351153},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Enable Control","Message":"(Update) (Enable Control) Send empty string when SMS sent is forced.","Timestamp":1711128259},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Extra Enable Control","Message":"(Update) (Extra Enable Control) Send empty string when SMS sent is forced.","Timestamp":1711128783},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Enable Control","Message":"(Update) (Enable Control) add FAKE msg for test","Timestamp":1711129191},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Enable Control","Message":"(Update) (Enable Control) remove SMS Template","Timestamp":1711478086},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Extra Enable Control","Message":"(Update) (Extra Enable Control) Remove SMS template","Timestamp":1711478110},{"Version":"2.8","UserName":"Mark_Bond","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) test change to block out customId 30 36","Timestamp":1713258924},{"Version":"2.8","UserName":"Mark_Bond","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) more testing on customId","Timestamp":1713259440},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) testing Rio associate ","Timestamp":1716198405},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) rio testing","Timestamp":1716199005},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) added check to return if the call is from gaurav or alex device","Timestamp":1716200101},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) checking the custom id to reject id 04 and 05 ","Timestamp":1716203803},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) changes the custom id to reject 04 or 5","Timestamp":1716204442},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) removed the comment to return if command is 3","Timestamp":1716204852},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) check added on heartbeat for custom id 4 and 5","Timestamp":1716211427},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) adding temp log on ria-associate method","Timestamp":1716211770},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) testing - check customer id on command =3 for 04 or 05","Timestamp":1716212316},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) log to get custom id","Timestamp":1716213190},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) removed the extra param in assciate","Timestamp":1716219144},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Create) (TriggerOTA) Create TriggerOTA command","Timestamp":1717658804},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"OTA Update","Message":"(Update) (OTA Update) Assign TriggerOTA command to button","Timestamp":1717658921},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"OTA Update","Message":"Associate groupParam OTA Update to command TriggerOTA","Timestamp":1717658930},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) change the URL to ask for firmware (tests)","Timestamp":1717944509},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) Modify URL to gets directly to the zip file","Timestamp":1718181373},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) new URL for test","Timestamp":1718263988},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) new URL for test 2","Timestamp":1718267063},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) new URL test","Timestamp":1718307242},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Get Firmware Version","Message":"(Create) (Get Firmware Version) Add button to Get Firmware Version in controls group","Timestamp":1718360523},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Get Firmware Version","Message":"Associate groupParam Get Firmware Version to command Get Firmware version","Timestamp":1718360533},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Current Firmware Version","Message":"(Create) (Current Firmware Version) Text to inform the current firmware version","Timestamp":1718360702},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Get Firmware version","Message":"(Update) (Get Firmware version) Add SMS command","Timestamp":1718360903},{"Version":"2.8","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Add GetFirmware Command","Timestamp":1718361570},{"Version":"2.8","UserName":"juanmi","Resource":"MessageType","Name":"ACK-FIRM","Message":"(Create) (ACK-FIRM) ACK for Get Firmware Version\n","Timestamp":1718361723},{"Version":"2.8","UserName":"juanmi","Resource":"MessageType","Name":"ACK-FIRM-SMS","Message":"(Create) (ACK-FIRM-SMS) ACK for command GetFirmware by SMS","Timestamp":1718361803},{"Version":"2.8","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) define var configsToUpdate = [];\nvar configsToSend = [];","Timestamp":1718362324},{"Version":"2.8","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Add configToUpdate to // send data back to receiver via console.log","Timestamp":1718364470},{"Version":"2.8","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) small typo error Firmware Version control","Timestamp":1718562258},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) new URL to test oysta","Timestamp":1718608642},{"Version":"2.8","UserName":"David_Admin","Resource":"GroupParam","Name":"Configuration Mode","Message":"(Update) (Configuration Mode) Reorder Group Params","Timestamp":1718618526},{"Version":"2.8","UserName":"David_Admin","Resource":"GroupParam","Name":"Get Firmware Version","Message":"(Update) (Get Firmware Version) Reorder Group Params","Timestamp":1718618533},{"Version":"2.8","UserName":"David_Admin","Resource":"GroupParam","Name":"Current Firmware Version","Message":"(Update) (Current Firmware Version) Reorder Group Params","Timestamp":1718618542},{"Version":"2.8","UserName":"David_Admin","Resource":"Group","Name":"Controls","Message":"(Update) (Controls) changed order of device controls","Timestamp":1718618566},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) new URL to OTA upgrade","Timestamp":1718636161},{"Version":"2.8","UserName":"David_Admin","Resource":"MessageType","Name":"ACK-HRB-SMS","Message":"(Update) (ACK-HRB-SMS) ack was incorrect","Timestamp":1718697201},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) new URL for testoysta","Timestamp":1718812460},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Get Firmware version","Message":"(Update) (Get Firmware version) for firmware in both formats (long/short)","Timestamp":1718817844},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Current Firmware Version","Message":"(Update) (Current Firmware Version) change description","Timestamp":1718818053},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Current Firmware Version Long","Message":"(Create) (Current Firmware Version Long) Text for Current Firmware Version Long Format","Timestamp":1718818112},{"Version":"2.8","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) add code for case 1A: long format of Firmware version","Timestamp":1718818383},{"Version":"2.8","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) change var fwVersionL = hex_to_ascii(value);","Timestamp":1718819021},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) URL to the NodeRed PoC server","Timestamp":1719421864},{"Version":"2.8","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 1","Message":"(Update) (Beacon 1) ack chase","Timestamp":1719578862},{"Version":"2.8","UserName":"Michael_Admin","Resource":"Command","Name":"Power Alert","Message":"(Update) (Power Alert) wack chase","Timestamp":1719579441},{"Version":"2.8","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Watch Face, HeartRate and Step Watch, Get Firmware Version, CustomID in operations to exit when it is presented.","Timestamp":1720455038},{"Version":"2.9","UserName":"juanmi","Resource":"MessageType","Name":"ACK-FIRM","Message":"(Update) (ACK-FIRM) Disable Long connection, enable do not send commands","Timestamp":1720717648},{"Version":"2.9","UserName":"juanmi","Resource":"MessageType","Name":"ACK-FIRM-SMS","Message":"(Update) (ACK-FIRM-SMS) Disable Long connection, enable do not send commands","Timestamp":1720717664},{"Version":"2.9","UserName":"juanmi","Resource":"MessageType","Name":"ACK-HRB-SMS","Message":"(Update) (ACK-HRB-SMS) Disable Long connection, enable do not send commands","Timestamp":1720717680},{"Version":"2.9","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) change URL to http://40.91.195.192:8098/fi_ota","Timestamp":1722507053},{"Version":"2.9","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) Add /api/ folder to the URL EndPoint","Timestamp":1722591687},{"Version":"2.9","UserName":"juanmi","Resource":"MessageType","Name":"COMM-SMS","Message":"(Update) (COMM-SMS) change to do common protocol Eview","Timestamp":1724069228},{"Version":"2.9","UserName":"juanmi","Resource":"MessageType","Name":"CHK-ASSO","Message":"(Update) (CHK-ASSO) change to do a common protocol Eview","Timestamp":1724069280},{"Version":"2.9","UserName":"juanmi","Resource":"MessageType","Name":"COMM-SMS","Message":"(Update) (COMM-SMS) undo last change, let Rio-SMS","Timestamp":1724069434},{"Version":"2.9","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) change Rio-Associate for Eview-Associate","Timestamp":1724070635},{"Version":"2.9","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Comment CustomID lines in command type 0x03. The device doesn't include it for now","Timestamp":1724242228},{"Version":"2.9","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) change URL to point Eview OTA server","Timestamp":1724928711},{"Version":"2.9","UserName":"Michael_Admin","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) pointing to oysta server by MDC ","Timestamp":1725362551},{"Version":"2.9","UserName":"Michael_Admin","Resource":"GroupParam","Name":"Dial Warning Time","Message":"(Update) (Dial Warning Time) mdc","Timestamp":1726746505},{"Version":"2.9","UserName":"Michael_Admin","Resource":"GroupParam","Name":"Dial Warning Time","Message":"(Update) (Dial Warning Time) mdc setting a help ","Timestamp":1726746755},{"Version":"2.9","UserName":"Michael_Admin","Resource":"GroupParam","Name":"Warning Time","Message":"(Update) (Warning Time) setting min time to be 5 ","Timestamp":1726749319},{"Version":"2.9","UserName":"Michael_Admin","Resource":"GroupParam","Name":"Warning Time","Message":"(Update) (Warning Time) for support ticket","Timestamp":1726821973},{"Version":"2.9","UserName":"juanmi","Resource":"GroupParam","Name":"Set Server","Message":"(Update) (Set Server) Add Server Option \"Staging Protocol Import\"","Timestamp":1728284696},{"Version":"2.9","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"OTA and msg types tidy up","Timestamp":1728377811},{"Version":"3.0","UserName":"juanmi","Resource":"GroupParam","Name":"Language","Message":"(Update) (Language) Added portuguese language","Timestamp":1729253638},{"Version":"3.0","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Request Location","Message":"(Update) (Request Location) request location set hidden false","Timestamp":1733323424},{"Version":"3.0","UserName":"David_Admin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) include 12 custom id","Timestamp":1733497295},{"Version":"3.0","UserName":"David_Admin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) add 06 custom id to avoid protocol congestion with ev06 model","Timestamp":1733502018},{"Version":"3.0","UserName":"Michael_Admin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) adding 07 for ev07 to customid","Timestamp":1733860473},{"Version":"3.0","UserName":"juanmi","Resource":"Command","Name":"Working Mode","Message":"(Update) (Working Mode) BUG 1441096 Change Interval for Mode 4 and 5 as cycle interval","Timestamp":1733949050},{"Version":"3.0","UserName":"juanmi","Resource":"GroupParam","Name":"Cycle Interval","Message":"(Update) (Cycle Interval) To reflect changes in Working mode 4 and 5. Need to send interval in Working Mode Command","Timestamp":1734001517},{"Version":"3.0","UserName":"juanmi","Resource":"GroupParam","Name":"Cycle Interval","Message":"Associate groupParam Cycle Interval to command Working Mode","Timestamp":1734001523},{"Version":"3.0","UserName":"juanmi","Resource":"GroupParam","Name":"Mode","Message":"(Update) (Mode) To reflect changes in Working mode 4 and 5. Need to send interval in Working Mode Command","Timestamp":1734001576},{"Version":"3.0","UserName":"juanmi","Resource":"GroupParam","Name":"Mode","Message":"Associate groupParam Mode to command Cycle","Timestamp":1734001582},{"Version":"3.0","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) Add selection for production or test OTA server using server settings","Timestamp":1736338588},{"Version":"3.0","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Bump version for protocol-dev","Timestamp":1737374423},{"Version":"3.1","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Add value == '64' to customID for Sentry","Timestamp":1742057726},{"Version":"3.1","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Add value == '64' to customID for Sentry","Timestamp":1742057746},{"Version":"3.2","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Change CUSTOMID Case, so if msg has CustomID then return...","Timestamp":1742496032},{"Version":"3.2","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) create function sendDataToReceiver() and insert to inform when customID fails","Timestamp":1742499686},{"Version":"3.2","UserName":"Sean-Admin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) uncommenting local debug","Timestamp":1744114071},{"Version":"3.2","UserName":"Sean-Admin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) undoing change","Timestamp":1744114164},{"Version":"3.2","UserName":"Sean-Admin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) uncommenting all localTesting code","Timestamp":1744114758},{"Version":"3.2","UserName":"Sean-Admin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) disable sendingData on case '03'","Timestamp":1744114903},{"Version":"3.2","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"\nDEV BUG 1634606 disable sendingData on case '03'","Timestamp":1744133008},{"Version":"3.3","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Return from function when no Imei in server param to create the long connection. sendMessageToLocalhostNoWait(\"Eview-ASSOCIATE;\" + imei + \";\" + serverParams.Guid + \";\");","Timestamp":1744278293},{"Version":"3.3","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Fix tickets regarding bugs with long connection","Timestamp":1744282925},{"Version":"3.4","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Comment \"return\" in msg ASSOCIATE in msg types !=03 ","Timestamp":1744367218},{"Version":"3.4","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Fix issue with long connection stablishment","Timestamp":1744367377},{"Version":"3.5","UserName":"juanmi","Resource":"MessageType","Name":"CON-ASSO","Message":"(Update) (CON-ASSO) change msg code to CON","Timestamp":1749056594},{"Version":"3.5","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) create long connection it it is needed for command 01 and 03","Timestamp":1749056964},{"Version":"3.5","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) comment //return to create long connection","Timestamp":1749108515},{"Version":"3.5","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Fix Message gets parsed by Watch/Sentry","Timestamp":1749580778},{"Version":"3.6","UserName":"Sean-Admin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) debugging version of ops","Timestamp":1752512140},{"Version":"3.6","UserName":"Sean-Admin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) reverting ops","Timestamp":1752512256},{"Version":"3.6","UserName":"juanmi","Resource":"Group","Name":"Convert Device","Message":"(Create) (Convert Device) Create group Convert Device","Timestamp":1753799991},{"Version":"3.6","UserName":"juanmi","Resource":"GroupParam","Name":"Profile","Message":"(Create) (Profile) Define param to choose new profile to convert","Timestamp":1753800289},{"Version":"3.6","UserName":"juanmi","Resource":"Command","Name":"getCustomId","Message":"(Create) (getCustomId) Command to get current value of CustomID","Timestamp":1753800680},{"Version":"3.6","UserName":"juanmi","Resource":"Command","Name":"setCustomId","Message":"(Create) (setCustomId) Define command to set Custom ID to convert to Roam and Sentry","Timestamp":1753801032},{"Version":"3.6","UserName":"juanmi","Resource":"GroupParam","Name":"Profile","Message":"(Update) (Profile) assign command","Timestamp":1753801474},{"Version":"3.6","UserName":"juanmi","Resource":"GroupParam","Name":"Profile","Message":"Associate groupParam Profile to command setCustomId","Timestamp":1753801478},{"Version":"3.6","UserName":"juanmi","Resource":"Command","Name":"setCustomId","Message":"(Update) (setCustomId) change selection values","Timestamp":1753801712},{"Version":"3.6","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"ticket 1785790: Create button in Rio device settings to change custom ID","Timestamp":1753816500},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) ticket 1796516: include GPS data in alarm","Timestamp":1754556277},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) undo changes add GPS location on Alarm","Timestamp":1754579334},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) ticket 1809866: Multimsg splitter to avoid Undefined value in script output","Timestamp":1756659844},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) ticket 1809866: define index var within decoder function","Timestamp":1756660884},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) back to previous version. bug only receive connection","Timestamp":1756665913},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) small fixes: debug msg to fix previous bug ticket 1809866","Timestamp":1756666536},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) define var localTesting = false;","Timestamp":1756666787},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) change console.log for console.debug","Timestamp":1756667194},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) comment every console.debug line","Timestamp":1756667740},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) back to previous version","Timestamp":1756668617},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Add Multimsg splitter","Timestamp":1756716942},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) commented return lines for associate msg","Timestamp":1756742711},{"Version":"3.7","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Ticket 1809866: Add multimsg parser and test example.","Timestamp":1756916195},{"Version":"3.8","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) TICKET 1822799: AddValue params.location_time when decoding oysta templates","Timestamp":1757012186},{"Version":"3.8","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Ticket 1822799: AGPS timestamp bug and ticket 1796516: GPS location data in alarm msg","Timestamp":1757092625},{"Version":"3.8","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Ticket 1822799: AGPS timestamp bug and ticket 1796516: GPS location data in alarm msg","Timestamp":1757093612},{"Version":"3.9","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Add 1024 weeks to timestamp if it's older than 1 year from now (AGPS bug)","Timestamp":1757345176},{"Version":"3.9","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Add 1024 weeks to timestamp if it's older than 1 year from now (AGPS bug)","Timestamp":1757345310},{"Version":"4.0","UserName":"Sean-Admin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) FIxed nullish operator as not support by node 10","Timestamp":1757507054},{"Version":"4.0","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Fix for Nullish (??) operator","Timestamp":1757507078},{"Version":"4.1","UserName":"juanmi","Resource":"GroupParam","Name":"Profile","Message":"(Delete) (Profile)","Timestamp":1761240137},{"Version":"4.1","UserName":"juanmi","Resource":"Group","Name":"Convert Device","Message":"(Delete) (Convert Device)","Timestamp":1761240154}],"ProtocolActionObjects":[],"Tags":[{"Id":2110,"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},{"Name":"testMCImportExport","Description":"A test message code to verify it imports correctly into Acceptance! Modify Description.","Code":"testMCImportExport","CanLiveInsights":false},{"Name":"gaurav_code_name","Description":"gaurav_code_desc","Code":"gaurav_code","CanLiveInsights":false}]} \ No newline at end of file +{"Id":184,"Name":null,"Description":null,"FirmwareVersion":"V04b.8601.2406.1.0.16.4411.2406.25","InProgress":false,"MessageTypes":[{"Id":5282,"Code":"CYC-BUFF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":2,"NewValue":"{\"Id\":5282,\"Code\":\"CYC-BUFF\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-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,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694505905}],"Tags":[]},{"Id":5281,"Code":"CYC","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5281,\"Code\":\"CYC\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-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,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694505829}],"Tags":[]},{"Id":5280,"Code":"CYC-BUF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":2,"NewValue":"{\"Id\":5280,\"Code\":\"CYC-BUF\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-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,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694505881}],"Tags":[]},{"Id":5279,"Code":"CYC-BUF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":2,"NewValue":"{\"Id\":5279,\"Code\":\"CYC-BUF\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-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,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694505892}],"Tags":[]},{"Id":5278,"Code":"ACK-RST","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"reset ok.","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":3290,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.3","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"Factory Reset","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 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);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0300' + 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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"CacheImei":false,"RegEx":"^reset ok.","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5278,\"Code\":\"ACK-RST\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"{{reset ok.|Reiniciar ok.}}\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":{\"Id\":3290,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.4\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Factory Reset\",\"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!';\\nif (params.DeviceVersion.DeviceVersion == '2') {\\n dataSMS = 'ineedtoresetEV05!';\\n}\\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\":null},\"CacheImei\":false,\"RegEx\":\"^(reset ok.|Reiniciar ok.)\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695719096}],"Tags":[]},{"Id":5277,"Code":"ACK-RST","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"reset ok.","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":3290,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.3","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"Factory Reset","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 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);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0300' + 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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"CacheImei":false,"RegEx":"^reset ok.","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":2,"NewValue":"{\"Id\":5277,\"Code\":\"ACK-RST\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"reset ok.\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^reset ok.\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694504639}],"Tags":[]},{"Id":5034,"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":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":3280,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.3","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"ASet SMS Prefix","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":9,"Order":null},"CacheImei":false,"RegEx":"^remove prefix ok.","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5033,"Code":"ACK-SRV","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Set IP ok.","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":3313,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.3","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"Server","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\n//var configs2 = [];\n/*if (params.SMSPassword.SMSPasswordOld) {\n var data2 = `${params.SMSPassword.SMSPasswordOld}prefix1,${serverParams.Imei}`;\n} else {\n var data2 = `prefix1,${serverParams.Imei}`;\n}\nAddValue('data', data2);*/\n//var commandConfigs2 = {\n// template: \"main\",\n// configs: configs2\n//};\n//msg.push(JSON.stringify(commandConfigs2));\nif (params.Server.SetServer) {\n var serverString = params.Server.SetServer.split(',');\n var domain = serverString[0];\n var port = serverString[1];\n if (params.SMSPassword.SMSPasswordOld) {\n var data = `${params.SMSPassword.SMSPasswordOld}IP1,${domain},${port}`;\n } else {\n var data = `IP1,${domain},${port}`;\n }\n}\nAddValue('data', data);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue2(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs2.push(cvpair);\n}\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":2,"Order":null},"CacheImei":false,"RegEx":"^Set IP ok.","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5033,\"Code\":\"ACK-SRV\",\"Name\":null,\"MessageCode\":\"ACK\",\"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\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":{\"Id\":3313,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.4\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Server\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\n//var configs2 = [];\\n/*if (params.SMSPassword.SMSPasswordOld) {\\n var data2 = `${params.SMSPassword.SMSPasswordOld}prefix1,${serverParams.Imei}`;\\n} else {\\n var data2 = `prefix1,${serverParams.Imei}`;\\n}\\nAddValue('data', data2);*/\\n//var commandConfigs2 = {\\n// template: \\\"main\\\",\\n// configs: configs2\\n//};\\n//msg.push(JSON.stringify(commandConfigs2));\\nif (params.Server.SetServer) {\\n var serverString = params.Server.SetServer.split(',');\\n var domain = serverString[0];\\n var port = serverString[1];\\n if (params.SMSPassword.SMSPasswordOld) {\\n var data = `${params.SMSPassword.SMSPasswordOld}IP1,${domain},${port}`;\\n } else {\\n var data = `IP1,${domain},${port}`;\\n }\\n}\\nAddValue('data', data);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue2(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs2.push(cvpair);\\n}\\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\":2,\"Order\":0},\"CacheImei\":false,\"RegEx\":\"^(Set IP ok.|Configuracin de IP OK)\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1696493376}],"Tags":[]},{"Id":5032,"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":3325,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.3","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"Request Location","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":true,"SendAttempts":25,"Order":null},"CacheImei":false,"RegEx":"^(Now:Loc Time: |Ubicacin GPS:Tiempo de Loc: )[^)]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5031,"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":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":3325,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.3","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"Request Location","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":true,"SendAttempts":25,"Order":null},"CacheImei":false,"RegEx":"^(Device location request have received!|Solicitud de ubicacin recibida!)","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5030,"Code":"ACK-APN","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Set APN ok.","HasTemplateGlobal":false,"ResponseTemplate":"ok1","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":3314,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.3","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"APN","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nif (params.SetAPN.SetAPN) {\n var apnString = params.SetAPN.SetAPN.split(',');\n var apn = apnString[0];\n var apn_username = apnString[1];\n var apn_password = apnString[2];\n if (params.SMSPassword.SMSPasswordOld) {\n var data = `${params.SMSPassword.SMSPasswordOld}S1,${apn},${apn_username},${apn_password}`;\n } else {\n var data = `S1,${apn},${apn_username},${apn_password}`;\n }\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":2,"Order":null},"CacheImei":false,"RegEx":"^Set APN ok.","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5030,\"Code\":\"ACK-APN\",\"Name\":null,\"MessageCode\":\"ACK\",\"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\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":{\"Id\":3314,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.4\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"APN\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nif (params.SetAPN.SetAPN) {\\n var apnString = params.SetAPN.SetAPN.split(',');\\n var apn = apnString[0];\\n var apn_username = apnString[1];\\n var apn_password = apnString[2];\\n if (params.SMSPassword.SMSPasswordOld) {\\n var data = `${params.SMSPassword.SMSPasswordOld}S1,${apn},${apn_username},${apn_password}`;\\n } else {\\n var data = `S1,${apn},${apn_username},${apn_password}`;\\n }\\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\":2,\"Order\":1},\"CacheImei\":false,\"RegEx\":\"^(Set APN ok.|Configuracin APN OK.)\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1696493432}],"Tags":[]},{"Id":5029,"Code":"ACK-RBT","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"reboot ok.","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":3315,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.3","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"Device Reboot","TemplateSMS":null,"Template":null,"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 sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '04'\nvar keyLength = '01'\nvar key = '12'\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)\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0300' + 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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"CacheImei":false,"RegEx":"^reboot ok.","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5029,\"Code\":\"ACK-RBT\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"{{reboot ok.|Reiniciar ok.}}\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":{\"Id\":3315,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.4\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Device Reboot\",\"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\":2,\"Order\":null},\"CacheImei\":false,\"RegEx\":\"^(reboot ok.|Reiniciar ok.)\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1696072379}],"Tags":[]},{"Id":5028,"Code":"ACK-Out Of Service","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB0003005BF1[^ ]*7F0130","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5027,"Code":"F-ACK-Address Resp","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB0003006262[^ ]*7F0128","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5026,"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":5025,"Code":"F-ACK-Version Invalid","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB00030018C5[^ ]*7F0111","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5024,"Code":"F-ACK-Length Error","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB0003005AE5[^ ]*7F0113","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5023,"Code":"F-ACK-Checksum Error","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB000300BD95[^ ]*7F0114","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5022,"Code":"F-ACK-Encryption Invalid","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB0003007BF5[^ ]*7F0112","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5021,"Code":"ACK-global","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-ACK;<>;AB00030008C7<>7F0100","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-ACK;[^;]*;AB00030008C7[^ ]*7F0100","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5020,"Code":"F-ACK-No Memory","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB000300CFB3[^ ]*7F0125","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5019,"Code":"F-ACK-SubFunction Not Supported","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-ACK;<>;AB00030083AC<>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":"^Eview-ACK;[^;]*;AB00030083AC[^7;]*7F0126","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5018,"Code":"F-ACK-Key Length Error","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB000300DEA5[^ ]*7F0117","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5017,"Code":"F-ACK-Data Size Error","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB00030028C3[^ ]*7F0122","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5016,"Code":"F-ACK-Invalid State","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB00030009D3[^ ]*7F0123","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5015,"Code":"COMM-SMS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Rio-<>-<>","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":"","LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Rio-[^-]*-[^-]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5015,\"Code\":\"COMM-SMS\",\"Name\":null,\"MessageCode\":\"COMM\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-<>-<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":\"\",\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"ProtocolsLibraryMethod\":null,\"ProtocolsLibraryMethodArgs\":null,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-[^-]*-[^-]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1724069228},{"Type":1,"NewValue":"{\"Id\":5015,\"Code\":\"COMM-SMS\",\"Name\":null,\"MessageCode\":\"COMM\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Rio-<>-<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":\"\",\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"ProtocolsLibraryMethod\":null,\"ProtocolsLibraryMethodArgs\":null,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Rio-[^-]*-[^-]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1724069434}],"Tags":[]},{"Id":5014,"Code":"RTL","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Rio-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":"^Rio-RTL;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5013,"Code":"CHK","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-HTB;<>;STATUS=<>;TIME=<>;BATP=<>;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=[^;;]*;GENERAL=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5013,\"Code\":\"CHK\",\"Name\":null,\"MessageCode\":\"CHK\",\"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,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-HTB;[^;]*;STATUS=[^;;]*;TIME=[^;;]*;BATP=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694505577}],"Tags":[]},{"Id":5012,"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":5011,"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":5010,"Code":"F-ACK-GPS Is Not Ready","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB0003008D93[^ ]*7F0127","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5009,"Code":"F-ACK-Data Format Invalid","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB0003004BF3[^ ]*7F0121","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5008,"Code":"F-ACK-Command Invalid","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB0003009C85[^ ]*7F0115","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5007,"Code":"F-ACK-BLE Password","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB000300CC8F[^7;]*7F0140","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5006,"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":5005,"Code":"F-ACK-Key Invalid","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB000300FFB5[^ ]*7F0116","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5004,"Code":"CHK-ASSO","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"RIO-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":"^RIO-ASSOCIATE;[^;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5004,\"Code\":\"CHK-ASSO\",\"Name\":null,\"MessageCode\":\"CHK\",\"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\":[]}","Timestamp":1724069280},{"Type":1,"NewValue":"{\"Id\":5004,\"Code\":\"CON-ASSO\",\"Name\":null,\"MessageCode\":\"CON\",\"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\":[]}","Timestamp":1749056594}],"Tags":[]},{"Id":5003,"Code":"F-ACK-Invalid Parameter","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ACK;[^;]*;AB000300EEA3[^ ]*7F0124","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5002,"Code":"ALNM","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Eview-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":"^Eview-ALNM;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5001,"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":5000,"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":[{"Type":1,"NewValue":"{\"Id\":5000,\"Code\":\"ENC-2\",\"Name\":null,\"MessageCode\":\"ENC\",\"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,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"\",\"RegExGlobal\":\"^(AB00[^ ]*)+\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694709634},{"Type":1,"NewValue":"{\"Id\":5000,\"Code\":\"ENC-2\",\"Name\":null,\"MessageCode\":\"ENC\",\"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,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"\",\"RegExGlobal\":\"^AB00[^ ]*\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694769070}],"Tags":[]},{"Id":4999,"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":4998,"Code":"ALF-C","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ALF-C;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4997,"Code":"ALA-O","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ALA-O;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4996,"Code":"ALA-S","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ALA-S;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4995,"Code":"Alert Finalized","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-SOSEnding;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4994,"Code":"BATF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-BATF;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4993,"Code":"ALMOV","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Eview-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":"^Eview-ALMOV;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4992,"Code":"ALA","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Eview-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":"^Eview-ALA;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4991,"Code":"ALA-C","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-ALA-C;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4990,"Code":"ALF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Eview-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":"^Eview-ALF;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4989,"Code":"CYC","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-CYC;<>;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":"^Eview-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":2,"NewValue":"{\"Id\":4989,\"Code\":\"CYC\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-CYC;<>;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,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694504710}],"Tags":[]},{"Id":4988,"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":4987,"Code":"PWRN","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-PWRN;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4986,"Code":"PWRF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-PWRF;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4985,"Code":"ALSP","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Eview-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":"^Eview-ALSP;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4984,"Code":"HRT","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Eview-HRT;<>;GENERAL=<>;<>;HRT=<>","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":"^Eview-HRT;[^;]*;GENERAL=[^;;]*;[^;;]*;HRT=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4984,\"Code\":\"HRT\",\"Name\":null,\"MessageCode\":\"HRT\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":1,\"Template\":\"Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>;TLEVEL=<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-HRT;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;HRT=[^;;]*;TLEVEL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694506002},{"Type":1,"NewValue":"{\"Id\":4984,\"Code\":\"HRT\",\"Name\":null,\"MessageCode\":\"HRT\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":1,\"Template\":\"Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>;TLEVEL=<>;LABEL=<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-HRT;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;HRT=[^;;]*;TLEVEL=[^;;]*;LABEL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694533036},{"Type":1,"NewValue":"{\"Id\":4984,\"Code\":\"HRT\",\"Name\":null,\"MessageCode\":\"HRT\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>;TLEVEL=<>;LABEL=<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-HRT;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;HRT=[^;;]*;TLEVEL=[^;;]*;LABEL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707754959}],"Tags":[]},{"Id":4983,"Code":"BATL","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Eview-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":"^Eview-BATL;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4982,"Code":"BATCF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-BATCF;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4981,"Code":"ALSOS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Eview-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":"^Eview-ALSOS;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":4980,"Code":"BATCN","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-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":"^Eview-BATCN;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5287,"Code":"COMM-STP","Name":null,"MessageCode":"COMM","NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-STP;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;STP=<>","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":"^Eview-STP;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;STP=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":5287,\"Code\":\"COMM-STP\",\"Name\":null,\"MessageCode\":\"COMM\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-STP;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;STP=<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-STP;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;STP=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694505682},{"Type":1,"NewValue":"{\"Id\":5287,\"Code\":\"COMM-STP\",\"Name\":null,\"MessageCode\":\"COMM\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-STP;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;STP=<>;LABEL=<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-STP;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;STP=[^;;]*;LABEL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694533081},{"Type":1,"NewValue":"{\"Id\":5287,\"Code\":\"COMM-STP\",\"Name\":null,\"MessageCode\":\"COMM\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":1,\"Template\":\"Eview-STP;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;STP=<>;LABEL=<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-STP;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;STP=[^;;]*;LABEL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694775990},{"Type":1,"NewValue":"{\"Id\":5287,\"Code\":\"STP\",\"Name\":null,\"MessageCode\":\"STEPS\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-STP;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;STP=<>;LABEL=<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-STP;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;STP=[^;;]*;LABEL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694776570},{"Type":1,"NewValue":"{\"Id\":5287,\"Code\":\"STP\",\"Name\":null,\"MessageCode\":\"STEPS\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":1,\"Template\":\"Eview-STP;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;STP=<>;LABEL=<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-STP;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;STP=[^;;]*;LABEL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694791307},{"Type":1,"NewValue":"{\"Id\":5287,\"Code\":\"STP\",\"Name\":null,\"MessageCode\":\"STEPS\",\"NeedAck\":false,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview-STP;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;STP=<>;LABEL=<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^Eview-STP;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;STP=[^;;]*;LABEL=[^=]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707755016}],"Tags":[]},{"Id":5853,"Code":"ACK-HRB-SMS","Name":null,"MessageCode":"ACK","NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Set heartbeat<>","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":3963,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.7","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Control Configuration Mode","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`;\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 heartbeat[^t]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":5853,\"Code\":\"ACK-HRB-SMS\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Set heartbeat<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":true,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":{\"Id\":3963,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.7\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Control Configuration Mode\",\"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`;\\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 heartbeat[^t]*\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1708015442},{"Type":1,"NewValue":"{\"Id\":5853,\"Code\":\"ACK-HRB-SMS\",\"Name\":null,\"MessageCode\":\"ACK\",\"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,\"Command\":{\"Id\":3963,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.8\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Control Configuration Mode\",\"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`;\\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\":[]}","Timestamp":1718697201},{"Type":1,"NewValue":"{\"Id\":5853,\"Code\":\"ACK-HRB-SMS\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Set heart beat<>\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"ProtocolsLibraryMethod\":null,\"ProtocolsLibraryMethodArgs\":null,\"Command\":{\"Id\":3963,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.9\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Control Configuration Mode\",\"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`;\\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\":[]}","Timestamp":1720717680}],"Tags":[]},{"Id":6943,"Code":"ACK-FIRM","Name":null,"MessageCode":"ACK","NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview;ACK-FIRM;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":3307,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.8","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Get Firmware version","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 = '02'; //Ask for firmware\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":null},"CacheImei":false,"RegEx":"^Eview;ACK-FIRM;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":6943,\"Code\":\"ACK-FIRM\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview;ACK-FIRM;<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":true,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":{\"Id\":3307,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.8\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Get Firmware version\",\"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 = '02'; //Ask for firmware\\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\":null},\"CacheImei\":false,\"RegEx\":\"^Eview;ACK-FIRM;[^;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718361723},{"Type":1,"NewValue":"{\"Id\":6943,\"Code\":\"ACK-FIRM\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview;ACK-FIRM;<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"ProtocolsLibraryMethod\":null,\"ProtocolsLibraryMethodArgs\":null,\"Command\":{\"Id\":3307,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.9\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Get Firmware version\",\"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 = '021A'; //Ask for firmware in both version\\r\\nvar command = '02';\\r\\nvar keyLength = '03';\\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' + '0500' + 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\":null},\"CacheImei\":false,\"RegEx\":\"^Eview;ACK-FIRM;[^;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1720717648}],"Tags":[]},{"Id":6944,"Code":"ACK-FIRM-SMS","Name":null,"MessageCode":"ACK","NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview;ACK-FIRM-SMS;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":3307,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.8","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Get Firmware version","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 = '02'; //Ask for firmware\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":null},"CacheImei":false,"RegEx":"^Eview;ACK-FIRM-SMS;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":6944,\"Code\":\"ACK-FIRM-SMS\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview;ACK-FIRM-SMS;<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":true,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":{\"Id\":3307,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.8\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Get Firmware version\",\"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 = '02'; //Ask for firmware\\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\":null},\"CacheImei\":false,\"RegEx\":\"^Eview;ACK-FIRM-SMS;[^;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718361803},{"Type":1,"NewValue":"{\"Id\":6944,\"Code\":\"ACK-FIRM-SMS\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"Eview;ACK-FIRM-SMS;<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"ProtocolsLibraryMethod\":null,\"ProtocolsLibraryMethodArgs\":null,\"Command\":{\"Id\":3307,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.9\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Get Firmware version\",\"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 = '021A'; //Ask for firmware in both version\\r\\nvar command = '02';\\r\\nvar keyLength = '03';\\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' + '0500' + 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\":null},\"CacheImei\":false,\"RegEx\":\"^Eview;ACK-FIRM-SMS;[^;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1720717664}],"Tags":[]}],"Commands":[{"Id":3280,"Name":"ASet SMS Prefix","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":9,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3280,\"Name\":\"ASet SMS Prefix\",\"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\":[]}","Timestamp":1695907993}],"Tags":[]},{"Id":3281,"Name":"Set Authorised Number 4","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\nif (params.WhiteListNumber4.EnableDisableWhiteListNumber4 == '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.WhiteListNumber4.Call == 'true') {\r\n value += '1'; // Togle Call\r\n} else {\r\n value += '0';\r\n} // Untogle Call\r\nif (params.WhiteListNumber4.Number) {\r\n //Authorised number 6\r\n value += '00101'; // No SIM Dialing + Contact Number 6\r\n var number = params.WhiteListNumber4.Number;\r\n numberHex = ascii_to_hexa(number).toUpperCase();\r\n} else {\r\n value += '00101';\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\n// select version\r\nswitch (params.DeviceVersion.DeviceVersion) {\r\n case '1':\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n case '2':\r\n var key = '34';\r\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\r\n if (params.WhiteListNumber4.Name) {\r\n var nameContact = params.WhiteListNumber4.Name;\r\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\r\n } else {\r\n var nameHex = ascii_to_hexa('Contact4').toUpperCase();\r\n }\r\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\r\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\r\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n default:\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n}\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3281,\"Name\":\"Set Authorised Number 4\",\"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\\nif (params.WhiteListNumber4.EnableDisableWhiteListNumber4 == '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.WhiteListNumber4.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.WhiteListNumber4.Number) {\\r\\n //Authorised number 6\\r\\n value += '00101'; // No SIM Dialing + Contact Number 6\\r\\n var number = params.WhiteListNumber4.Number;\\r\\n numberHex = ascii_to_hexa(number).toUpperCase();\\r\\n} else {\\r\\n value += '00101';\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.WhiteListNumber4.Name) {\\r\\n var nameContact = params.WhiteListNumber4.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Contact4').toUpperCase();\\r\\n }\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908804}],"Tags":[]},{"Id":3282,"Name":"Over Speed Alert","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3282,\"Name\":\"Over Speed Alert\",\"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\":[]}","Timestamp":1695908623}],"Tags":[]},{"Id":3283,"Name":"Set Oysta Number","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3283,\"Name\":\"Set Oysta Number\",\"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\":[]}","Timestamp":1695908900}],"Tags":[]},{"Id":3285,"Name":"Alarm Clock 4","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3285,\"Name\":\"Alarm Clock 4\",\"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\":[]}","Timestamp":1695907970}],"Tags":[]},{"Id":3286,"Name":"Set Authorised Number 2","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 numberHex = '';\r\nvar value = '';\r\nif (params.WhiteListNumber2.EnableDisableWhiteListNumber2 == '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.WhiteListNumber2.Call == 'true') {\r\n value += '1'; // Togle Call\r\n} else {\r\n value += '0';\r\n} // Untogle Call\r\nif (params.WhiteListNumber2.Number) {\r\n //Authorised number 4\r\n value += '00011'; // No SIM Dialing + Contact Number 4\r\n var number = params.WhiteListNumber2.Number;\r\n numberHex = ascii_to_hexa(number).toUpperCase();\r\n} else {\r\n value += '00011';\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\n// select version\r\nswitch (params.DeviceVersion.DeviceVersion) {\r\n case '1':\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n case '2':\r\n var key = '34';\r\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\r\n if (params.WhiteListNumber2.Name) {\r\n var nameContact = params.WhiteListNumber2.Name;\r\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\r\n } else {\r\n var nameHex = ascii_to_hexa('Contact2').toUpperCase();\r\n }\r\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\r\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\r\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n default:\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n}\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3286,\"Name\":\"Set Authorised Number 2\",\"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 numberHex = '';\\r\\nvar value = '';\\r\\nif (params.WhiteListNumber2.EnableDisableWhiteListNumber2 == '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.WhiteListNumber2.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.WhiteListNumber2.Number) {\\r\\n //Authorised number 4\\r\\n value += '00011'; // No SIM Dialing + Contact Number 4\\r\\n var number = params.WhiteListNumber2.Number;\\r\\n numberHex = ascii_to_hexa(number).toUpperCase();\\r\\n} else {\\r\\n value += '00011';\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.WhiteListNumber2.Name) {\\r\\n var nameContact = params.WhiteListNumber2.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Contact2').toUpperCase();\\r\\n }\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908771}],"Tags":[]},{"Id":3288,"Name":"Power Off","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 sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '04'\nvar keyLength = '01'\nvar key = '14'\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)\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0300' + 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":[{"Type":1,"NewValue":"{\"Id\":3288,\"Name\":\"Power Off\",\"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 sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\\nvar command = '04'\\nvar keyLength = '01'\\nvar key = '14'\\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)\\n//Hpw to calculate sequenceID\\nvar prefix = 'AB10' + '0300' + 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\":[]}","Timestamp":1695908691},{"Type":1,"NewValue":"{\"Id\":3288,\"Name\":\"Power Off\",\"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\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1708014431}],"Tags":[]},{"Id":3289,"Name":"Extra Enable Control","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3289,\"Name\":\"Extra Enable Control\",\"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\":6,\"SendAttempts\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694506789},{"Type":1,"NewValue":"{\"Id\":3289,\"Name\":\"Extra Enable Control\",\"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\":6,\"SendAttempts\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692100},{"Type":1,"NewValue":"{\"Id\":3289,\"Name\":\"Extra Enable Control\",\"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\":6,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908390},{"Type":1,"NewValue":"{\"Id\":3289,\"Name\":\"Extra Enable Control\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\r\\nvar configsSMS = [];\\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\\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\nvar dataSMS = '';\\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 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 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\":6,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1711128783},{"Type":1,"NewValue":"{\"Id\":3289,\"Name\":\"Extra Enable Control\",\"TemplateSMS\":\"\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\r\\nvar configsSMS = [];\\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\\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\nvar dataSMS = '';\\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 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 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\":6,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1711478110}],"Tags":[{"Id":1645,"Name":"seventh","BackendAction":"commandPriority","Value":"6"}]},{"Id":3290,"Name":"Factory Reset","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 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);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0300' + 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":[{"Type":1,"NewValue":"{\"Id\":3290,\"Name\":\"Factory Reset\",\"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\":0,\"HasAck\":true,\"HexString\":true,\"Order\":null,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694506940},{"Type":1,"NewValue":"{\"Id\":3290,\"Name\":\"Factory Reset\",\"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!';\\nif (params.DeviceVersion.DeviceVersion == '2') {\\n dataSMS = 'ineedtoresetEV05!';\\n}\\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\":null,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694765370},{"Type":1,"NewValue":"{\"Id\":3290,\"Name\":\"Factory Reset\",\"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!';\\nif (params.DeviceVersion.DeviceVersion == '2') {\\n dataSMS = 'ineedtoresetEV05!';\\n}\\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\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908410}],"Tags":[]},{"Id":3292,"Name":"SOS Button Settings","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3292,\"Name\":\"SOS Button Settings\",\"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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692287},{"Type":1,"NewValue":"{\"Id\":3292,\"Name\":\"SOS Button Settings\",\"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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908998},{"Type":1,"NewValue":"{\"Id\":3292,\"Name\":\"SOS Button Settings\",\"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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695911479},{"Type":1,"NewValue":"{\"Id\":3292,\"Name\":\"SOS Button Settings\",\"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\":[]}","Timestamp":1695913764}],"Tags":[]},{"Id":3294,"Name":"SOS Option","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3294,\"Name\":\"SOS Option\",\"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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692312},{"Type":1,"NewValue":"{\"Id\":3294,\"Name\":\"SOS Option\",\"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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695909019},{"Type":1,"NewValue":"{\"Id\":3294,\"Name\":\"SOS Option\",\"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\":[]}","Timestamp":1695911521}],"Tags":[]},{"Id":3295,"Name":"Enable Control","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}\n// activity fuction, step counting, home-wifi location, data-saver, NLprovider, power control,\n// sos cancel switch, Long SMS, plus 7 more without functions\nvalue += '000000';\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3295,\"Name\":\"Enable Control\",\"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}\\n// activity fuction, step counting, home-wifi location, data-saver, NLprovider, power control,\\n// sos cancel switch, Long SMS, plus 7 more without functions\\nvalue += '000000';\\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\":5,\"SendAttempts\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694506753},{"Type":1,"NewValue":"{\"Id\":3295,\"Name\":\"Enable Control\",\"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}\\n// activity fuction, step counting, home-wifi location, data-saver, NLprovider, power control,\\n// sos cancel switch, Long SMS, plus 7 more without functions\\nvalue += '000000';\\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\":5,\"SendAttempts\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694506831},{"Type":1,"NewValue":"{\"Id\":3295,\"Name\":\"Enable Control\",\"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\":5,\"SendAttempts\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694508263},{"Type":1,"NewValue":"{\"Id\":3295,\"Name\":\"Enable Control\",\"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\":5,\"SendAttempts\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692073},{"Type":1,"NewValue":"{\"Id\":3295,\"Name\":\"Enable Control\",\"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\":5,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908366},{"Type":1,"NewValue":"{\"Id\":3295,\"Name\":\"Enable Control\",\"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\":5,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695909438},{"Type":1,"NewValue":"{\"Id\":3295,\"Name\":\"Enable Control\",\"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\":5,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695912175},{"Type":1,"NewValue":"{\"Id\":3295,\"Name\":\"Enable Control\",\"TemplateSMS\":\"<>\",\"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 configsSMS = [];\\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);\\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\\nvar data = prefix + messageBody;\\nAddValue('data', data);\\nAddValue('sequenceNumber', sequenceID);\\nvar dataSMS = ''; //empty\\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}\\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\":5,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1711128259},{"Type":1,"NewValue":"{\"Id\":3295,\"Name\":\"Enable Control\",\"TemplateSMS\":\"<>\",\"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 configsSMS = [];\\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);\\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\\nvar data = prefix + messageBody;\\nAddValue('data', data);\\nAddValue('sequenceNumber', sequenceID);\\nvar dataSMS = 'FAKE'; //empty\\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}\\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\":5,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1711129191},{"Type":1,"NewValue":"{\"Id\":3295,\"Name\":\"Enable Control\",\"TemplateSMS\":\"\",\"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 configsSMS = [];\\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);\\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\\nvar data = prefix + messageBody;\\nAddValue('data', data);\\nAddValue('sequenceNumber', sequenceID);\\nvar dataSMS = 'FAKE'; //empty\\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}\\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\":5,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1711478086}],"Tags":[{"Id":1644,"Name":"sixthCommand","BackendAction":"commandPriority","Value":"5"}]},{"Id":3296,"Name":"Beacon 1","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// EnableDisableSetBeacon\r\n// BeaconsDetails\r\nvar 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 beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\nif (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.SetBeacon1.BeaconName1) {\r\n var beaconString = params.SetBeacon1.BeaconName1.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}\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\n//var keyLength = '14';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\r\n//Hpw to calculate sequenceID\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 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":24,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3296,\"Name\":\"Beacon 1\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (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.SetBeacon1.BeaconName1) {\\r\\n var beaconString = params.SetBeacon1.BeaconName1.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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":1695908009},{"Type":1,"NewValue":"{\"Id\":3296,\"Name\":\"Beacon 1\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (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.SetBeacon1.BeaconName1) {\\r\\n var beaconString = params.SetBeacon1.BeaconName1.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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\":[]}","Timestamp":1719578862}],"Tags":[]},{"Id":3297,"Name":"Beacon 10","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// EnableDisableSetBeacon\r\n// BeaconsDetails\r\nvar 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 beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\nif (params.SetBeacon10.EnableDisableBeacon10 == 'true') {\r\n value += '1'; //Enable\r\n value += '0001001'; // Beacon 10\r\n //Beacon 1\r\n} else {\r\n value = '00001001';\r\n}\r\n// name, mac, major, minor\r\nif (params.SetBeacon10.BeaconName10) {\r\n var beaconString = params.SetBeacon10.BeaconName10.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}\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\n//var keyLength = '14';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\r\n//Hpw to calculate sequenceID\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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3297,\"Name\":\"Beacon 10\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (params.SetBeacon10.EnableDisableBeacon10 == 'true') {\\r\\n value += '1'; //Enable\\r\\n value += '0001001'; // Beacon 10\\r\\n //Beacon 1\\r\\n} else {\\r\\n value = '00001001';\\r\\n}\\r\\n// name, mac, major, minor\\r\\nif (params.SetBeacon10.BeaconName10) {\\r\\n var beaconString = params.SetBeacon10.BeaconName10.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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":1695908059}],"Tags":[]},{"Id":3298,"Name":"Beacon 6","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// EnableDisableSetBeacon\r\n// BeaconsDetails\r\nvar 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 beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\nif (params.SetBeacon6.EnableDisableBeacon6 == 'true') {\r\n value += '1'; //Enable\r\n value += '0000101'; // Beacon 6\r\n //Beacon 1\r\n} else {\r\n value = '00000101';\r\n}\r\n// name, mac, major, minor\r\nif (params.SetBeacon6.BeaconName6) {\r\n var beaconString = params.SetBeacon6.BeaconName6.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}\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\n//var keyLength = '14';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\r\n//Hpw to calculate sequenceID\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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3298,\"Name\":\"Beacon 6\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (params.SetBeacon6.EnableDisableBeacon6 == 'true') {\\r\\n value += '1'; //Enable\\r\\n value += '0000101'; // Beacon 6\\r\\n //Beacon 1\\r\\n} else {\\r\\n value = '00000101';\\r\\n}\\r\\n// name, mac, major, minor\\r\\nif (params.SetBeacon6.BeaconName6) {\\r\\n var beaconString = params.SetBeacon6.BeaconName6.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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":1695908144}],"Tags":[]},{"Id":3299,"Name":"Beacon 2","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// EnableDisableSetBeacon\r\n// BeaconsDetails\r\nvar 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 beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\nif (params.SetBeacon2.EnableDisableBeacon2 == 'true') {\r\n value += '1'; //Enable\r\n value += '0000001'; // Beacon 2\r\n} else {\r\n value = '00000001';\r\n}\r\n// name, mac, major, minor\r\nif (params.SetBeacon2.BeaconName2) {\r\n var beaconString = params.SetBeacon2.BeaconName2.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}\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\n//var keyLength = '14';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\r\n//Hpw to calculate sequenceID\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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3299,\"Name\":\"Beacon 2\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (params.SetBeacon2.EnableDisableBeacon2 == 'true') {\\r\\n value += '1'; //Enable\\r\\n value += '0000001'; // Beacon 2\\r\\n} else {\\r\\n value = '00000001';\\r\\n}\\r\\n// name, mac, major, minor\\r\\nif (params.SetBeacon2.BeaconName2) {\\r\\n var beaconString = params.SetBeacon2.BeaconName2.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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":1695908074}],"Tags":[]},{"Id":3300,"Name":"Beacon 3","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// EnableDisableSetBeacon\r\n// BeaconsDetails\r\nvar 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 beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\nif (params.SetBeacon3.EnableDisableBeacon3 == 'true') {\r\n value += '1'; //Enable\r\n value += '0000010'; // Beacon 3\r\n} else {\r\n value = '00000010';\r\n}\r\n// name, mac, major, minor\r\nif (params.SetBeacon3.BeaconName3) {\r\n var beaconString = params.SetBeacon3.BeaconName3.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}\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\n//var keyLength = '14';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\r\n//Hpw to calculate sequenceID\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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3300,\"Name\":\"Beacon 3\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (params.SetBeacon3.EnableDisableBeacon3 == 'true') {\\r\\n value += '1'; //Enable\\r\\n value += '0000010'; // Beacon 3\\r\\n} else {\\r\\n value = '00000010';\\r\\n}\\r\\n// name, mac, major, minor\\r\\nif (params.SetBeacon3.BeaconName3) {\\r\\n var beaconString = params.SetBeacon3.BeaconName3.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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":1695908094}],"Tags":[]},{"Id":3301,"Name":"Beacon 4","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// EnableDisableSetBeacon\r\n// BeaconsDetails\r\nvar 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 beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\nif (params.SetBeacon4.EnableDisableBeacon4 == 'true') {\r\n value += '1'; //Enable\r\n value += '0000011'; // Beacon 4\r\n} else {\r\n value = '00000011';\r\n}\r\n// name, mac, major, minor\r\nif (params.SetBeacon4.BeaconName4) {\r\n var beaconString = params.SetBeacon4.BeaconName4.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}\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\n//var keyLength = '14';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\r\n//Hpw to calculate sequenceID\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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3301,\"Name\":\"Beacon 4\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (params.SetBeacon4.EnableDisableBeacon4 == 'true') {\\r\\n value += '1'; //Enable\\r\\n value += '0000011'; // Beacon 4\\r\\n} else {\\r\\n value = '00000011';\\r\\n}\\r\\n// name, mac, major, minor\\r\\nif (params.SetBeacon4.BeaconName4) {\\r\\n var beaconString = params.SetBeacon4.BeaconName4.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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":1695908112}],"Tags":[]},{"Id":3302,"Name":"Beacon 5","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// EnableDisableSetBeacon\r\n// BeaconsDetails\r\nvar 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 beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\nif (params.SetBeacon5.EnableDisableBeacon5 == 'true') {\r\n value += '1'; //Enable\r\n value += '0000100'; // Beacon 5\r\n //Beacon 1\r\n} else {\r\n value = '00000100';\r\n}\r\n// name, mac, major, minor\r\nif (params.SetBeacon5.BeaconName5) {\r\n var beaconString = params.SetBeacon5.BeaconName5.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}\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\n//var keyLength = '14';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\r\n//Hpw to calculate sequenceID\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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3302,\"Name\":\"Beacon 5\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (params.SetBeacon5.EnableDisableBeacon5 == 'true') {\\r\\n value += '1'; //Enable\\r\\n value += '0000100'; // Beacon 5\\r\\n //Beacon 1\\r\\n} else {\\r\\n value = '00000100';\\r\\n}\\r\\n// name, mac, major, minor\\r\\nif (params.SetBeacon5.BeaconName5) {\\r\\n var beaconString = params.SetBeacon5.BeaconName5.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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":1695908127}],"Tags":[]},{"Id":3303,"Name":"Beacon 7","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// EnableDisableSetBeacon\r\n// BeaconsDetails\r\nvar 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 beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\nif (params.SetBeacon7.EnableDisableBeacon7 == 'true') {\r\n value += '1'; //Enable\r\n value += '0000110'; // Beacon 1\r\n //Beacon 1\r\n} else {\r\n value = '00000110';\r\n}\r\n// name, mac, major, minor\r\nif (params.SetBeacon7.BeaconName7) {\r\n var beaconString = params.SetBeacon7.BeaconName7.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}\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\n//var keyLength = '14';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\r\n//Hpw to calculate sequenceID\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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3303,\"Name\":\"Beacon 7\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (params.SetBeacon7.EnableDisableBeacon7 == 'true') {\\r\\n value += '1'; //Enable\\r\\n value += '0000110'; // Beacon 1\\r\\n //Beacon 1\\r\\n} else {\\r\\n value = '00000110';\\r\\n}\\r\\n// name, mac, major, minor\\r\\nif (params.SetBeacon7.BeaconName7) {\\r\\n var beaconString = params.SetBeacon7.BeaconName7.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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":1695908162}],"Tags":[]},{"Id":3304,"Name":"Beacon 9","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// EnableDisableSetBeacon\r\n// BeaconsDetails\r\nvar 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 beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\nif (params.SetBeacon9.EnableDisableBeacon9 == 'true') {\r\n value += '1'; //Enable\r\n value += '0001000'; // Beacon 9\r\n //Beacon 1\r\n} else {\r\n value = '00001000';\r\n}\r\n// name, mac, major, minor\r\nif (params.SetBeacon9.BeaconName9) {\r\n var beaconString = params.SetBeacon9.BeaconName9.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}\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\n//var keyLength = '14';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\r\n//Hpw to calculate sequenceID\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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3304,\"Name\":\"Beacon 9\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (params.SetBeacon9.EnableDisableBeacon9 == 'true') {\\r\\n value += '1'; //Enable\\r\\n value += '0001000'; // Beacon 9\\r\\n //Beacon 1\\r\\n} else {\\r\\n value = '00001000';\\r\\n}\\r\\n// name, mac, major, minor\\r\\nif (params.SetBeacon9.BeaconName9) {\\r\\n var beaconString = params.SetBeacon9.BeaconName9.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908231},{"Type":1,"NewValue":"{\"Id\":3304,\"Name\":\"Beacon 9\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (params.SetBeacon9.EnableDisableBeacon9 == 'true') {\\r\\n value += '1'; //Enable\\r\\n value += '0001000'; // Beacon 9\\r\\n //Beacon 1\\r\\n} else {\\r\\n value = '00001000';\\r\\n}\\r\\n// name, mac, major, minor\\r\\nif (params.SetBeacon9.BeaconName9) {\\r\\n var beaconString = params.SetBeacon9.BeaconName9.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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":1695909400}],"Tags":[]},{"Id":3305,"Name":"Set System Language","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.SystemLanguage.Language) {\r\n var language = params.SystemLanguage.Language;\r\n var languageHex = ascii_to_hexa(language).toUpperCase();\r\n // languageHex = changeEndianness(languageHex);\r\n}\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\n// var keyLength = ('00' + decimalToHex(2 + (languageHex.length / 2))).slice(-2).toUpperCase();\r\nvar keyLength = '06';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (languageHex.length / 2))).slice(-4).toUpperCase();\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\nvar totalLenght = '0800';\r\n//Hpw to calculate sequenceID\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3305,\"Name\":\"Set System Language\",\"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.SystemLanguage.Language) {\\r\\n var language = params.SystemLanguage.Language;\\r\\n var languageHex = ascii_to_hexa(language).toUpperCase();\\r\\n // languageHex = changeEndianness(languageHex);\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\n// var keyLength = ('00' + decimalToHex(2 + (languageHex.length / 2))).slice(-2).toUpperCase();\\r\\nvar keyLength = '06';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (languageHex.length / 2))).slice(-4).toUpperCase();\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\nvar totalLenght = '0800';\\r\\n//Hpw to calculate sequenceID\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908946}],"Tags":[]},{"Id":3306,"Name":"Voice Prompt","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":5,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3306,\"Name\":\"Voice Prompt\",\"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\":[]}","Timestamp":1695909245}],"Tags":[]},{"Id":3307,"Name":"Get Firmware version","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 = '02'; //Ask for firmware\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\n// Check always the full length\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":3,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3307,\"Name\":\"Get Firmware version\",\"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 = '02'; //Ask for firmware\\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\\n// Check always the full length\\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\":[]}","Timestamp":1695908473},{"Type":1,"NewValue":"{\"Id\":3307,\"Name\":\"Get Firmware version\",\"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 = '02'; //Ask for firmware\\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\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718360903},{"Type":1,"NewValue":"{\"Id\":3307,\"Name\":\"Get Firmware version\",\"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 = '021A'; //Ask for firmware in both version\\r\\nvar command = '02';\\r\\nvar keyLength = '03';\\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' + '0500' + 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\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718817844}],"Tags":[]},{"Id":3308,"Name":"Alarm Clock 2","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3308,\"Name\":\"Alarm Clock 2\",\"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\":[]}","Timestamp":1695907928}],"Tags":[]},{"Id":3309,"Name":"Voice Prompt Volume","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.VoicePromptVolume.Volume) {\n var volume = parseInt(params.VoicePromptVolume.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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3309,\"Name\":\"Voice Prompt Volume\",\"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.VoicePromptVolume.Volume) {\\n var volume = parseInt(params.VoicePromptVolume.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\":[]}","Timestamp":1695909306}],"Tags":[]},{"Id":3310,"Name":"Beacon 8","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// EnableDisableSetBeacon\r\n// BeaconsDetails\r\nvar 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 beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\nif (params.SetBeacon8.EnableDisableBeacon8 == 'true') {\r\n value += '1'; //Enable\r\n value += '0000111'; // Beacon 8\r\n //Beacon 1\r\n} else {\r\n value = '00000111';\r\n}\r\n// name, mac, major, minor\r\nif (params.SetBeacon8.BeaconName8) {\r\n var beaconString = params.SetBeacon8.BeaconName8.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}\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\n//var keyLength = '14';\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\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\r\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\r\n//Hpw to calculate sequenceID\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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3310,\"Name\":\"Beacon 8\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// EnableDisableSetBeacon\\r\\n// BeaconsDetails\\r\\nvar 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 beacon_name = '';\\r\\nvar beacon_mac = '000000000000'; //default\\r\\nif (params.SetBeacon8.EnableDisableBeacon8 == 'true') {\\r\\n value += '1'; //Enable\\r\\n value += '0000111'; // Beacon 8\\r\\n //Beacon 1\\r\\n} else {\\r\\n value = '00000111';\\r\\n}\\r\\n// name, mac, major, minor\\r\\nif (params.SetBeacon8.BeaconName8) {\\r\\n var beaconString = params.SetBeacon8.BeaconName8.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}\\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\\n//var keyLength = '14';\\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\\n//var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\\r\\n//totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\\r\\n//Hpw to calculate sequenceID\\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 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":1695908211}],"Tags":[]},{"Id":3311,"Name":"Fall Down Alert","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.FallAlarm.EnableDisableFallDownAlert == 'true') {\n value += '1'\n if (params.FallAlarm.Dial == 'true') {\n value += '100'\n } else {\n value += '000'\n }\n if (params.FallAlarm.Sensitivity) {\n var sensitivity = parseInt(params.FallAlarm.Sensitivity)\n sensitivity = ('0000' + decimalToBinary(sensitivity)).slice(-4).toUpperCase()\n value += sensitivity\n }\n} else {\n value = '00000000'\n}\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase()\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '02'\nvar key = '56'\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' + '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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3311,\"Name\":\"Fall Down Alert\",\"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.FallAlarm.EnableDisableFallDownAlert == 'true') {\\n value += '1'\\n if (params.FallAlarm.Dial == 'true') {\\n value += '100'\\n } else {\\n value += '000'\\n }\\n if (params.FallAlarm.Sensitivity) {\\n var sensitivity = parseInt(params.FallAlarm.Sensitivity)\\n sensitivity = ('0000' + decimalToBinary(sensitivity)).slice(-4).toUpperCase()\\n value += sensitivity\\n }\\n} else {\\n value = '00000000'\\n}\\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase()\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\\nvar command = '02'\\nvar keyLength = '02'\\nvar key = '56'\\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' + '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 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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692118},{"Type":1,"NewValue":"{\"Id\":3311,\"Name\":\"Fall Down Alert\",\"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.FallAlarm.EnableDisableFallDownAlert == 'true') {\\n value += '1'\\n if (params.FallAlarm.Dial == 'true') {\\n value += '100'\\n } else {\\n value += '000'\\n }\\n if (params.FallAlarm.Sensitivity) {\\n var sensitivity = parseInt(params.FallAlarm.Sensitivity)\\n sensitivity = ('0000' + decimalToBinary(sensitivity)).slice(-4).toUpperCase()\\n value += sensitivity\\n }\\n} else {\\n value = '00000000'\\n}\\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase()\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\\nvar command = '02'\\nvar keyLength = '02'\\nvar key = '56'\\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' + '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 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\":[]}","Timestamp":1695908430},{"Type":1,"NewValue":"{\"Id\":3311,\"Name\":\"Fall Down Alert\",\"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.FallAlarm.EnableDisableFallDownAlert == 'true') {\\n value += '1'\\n if (params.FallAlarm.Dial == 'true') {\\n value += '100'\\n } else {\\n value += '000'\\n }\\n if (params.FallAlarm.Sensitivity) {\\n var sensitivity = parseInt(params.FallAlarm.Sensitivity)\\n sensitivity = ('0000' + decimalToBinary(sensitivity)).slice(-4).toUpperCase()\\n value += sensitivity\\n }\\n} else {\\n value = '00000000'\\n}\\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase()\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\\nvar command = '02'\\nvar keyLength = '02'\\nvar key = '56'\\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' + '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 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\":3,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695939148},{"Type":1,"NewValue":"{\"Id\":3311,\"Name\":\"Fall Down Alert\",\"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.FallAlarm.EnableDisableFallDownAlert == 'true') {\\n value += '1'\\n if (params.FallAlarm.Dial == 'true') {\\n value += '100'\\n } else {\\n value += '000'\\n }\\n if (params.FallAlarm.Sensitivity) {\\n var sensitivity = parseInt(params.FallAlarm.Sensitivity)\\n sensitivity = ('0000' + decimalToBinary(sensitivity)).slice(-4).toUpperCase()\\n value += sensitivity\\n }\\n} else {\\n value = '00000000'\\n}\\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase()\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\\nvar command = '02'\\nvar keyLength = '02'\\nvar key = '56'\\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' + '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 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\":[]}","Timestamp":1696443207}],"Tags":[]},{"Id":3312,"Name":"Alarm Clock 3","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3312,\"Name\":\"Alarm Clock 3\",\"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\":[]}","Timestamp":1695907948}],"Tags":[]},{"Id":3315,"Name":"Device Reboot","TemplateSMS":null,"Template":null,"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 sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '04'\nvar keyLength = '01'\nvar key = '12'\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)\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0300' + 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":[{"Type":1,"NewValue":"{\"Id\":3315,\"Name\":\"Device Reboot\",\"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\":null,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694506441},{"Type":1,"NewValue":"{\"Id\":3315,\"Name\":\"Device Reboot\",\"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\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908342}],"Tags":[]},{"Id":3316,"Name":"Welfare Check","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 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' + '0B00' + 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":9,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3316,\"Name\":\"Welfare Check\",\"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 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' + '0B00' + 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\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507593},{"Type":1,"NewValue":"{\"Id\":3316,\"Name\":\"Welfare Check\",\"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 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' + '0B00' + 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\":[]}","Timestamp":1695909332},{"Type":1,"NewValue":"{\"Id\":3316,\"Name\":\"Welfare Check\",\"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 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' + '0B00' + 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\":[]}","Timestamp":1695911565},{"Type":1,"NewValue":"{\"Id\":3316,\"Name\":\"Welfare Check\",\"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\":[]}","Timestamp":1696607872}],"Tags":[]},{"Id":3317,"Name":"Working Mode","TemplateSMS":"","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// Check selected working mode\r\nif (params.WorkingMode.Mode) {\r\n var mode = params.WorkingMode.Mode;\r\n} else {\r\n var mode = '06';\r\n} // default mode 6\r\n// for model with time interval\r\nswitch (mode) {\r\n case '04':\r\n case '05':\r\n if (params.WorkingMode.TimeInterval) {\r\n var value = parseInt(params.WorkingMode.TimeInterval) * 60;\r\n value = decimalToHex(value);\r\n value = ('000000' + value).slice(-6).toUpperCase();\r\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\r\n } else {\r\n var value = 60 * 60; // default value 60*60\r\n value = decimalToHex(value);\r\n value = ('000000' + value).slice(-6).toUpperCase();\r\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\r\n } // default mode 6\r\n break;\r\n default:\r\n var value = '';\r\n value += '000000'; // Time interval to zero\r\n}\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '05';\r\nvar key = '0A';\r\nvar messageBody = command + keyLength + key + value + mode;\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' + '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}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3317,\"Name\":\"Working Mode\",\"TemplateSMS\":\"\",\"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// Check selected working mode\\r\\nif (params.WorkingMode.Mode) {\\r\\n var mode = params.WorkingMode.Mode;\\r\\n} else {\\r\\n var mode = '06';\\r\\n} // default mode 6\\r\\n// for model with time interval\\r\\nswitch (mode) {\\r\\n case '04':\\r\\n case '05':\\r\\n if (params.WorkingMode.TimeInterval) {\\r\\n var value = parseInt(params.WorkingMode.TimeInterval) * 60;\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n } else {\\r\\n var value = 60 * 60; // default value 60*60\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n } // default mode 6\\r\\n break;\\r\\n default:\\r\\n var value = '';\\r\\n value += '000000'; // Time interval to zero\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar keyLength = '05';\\r\\nvar key = '0A';\\r\\nvar messageBody = command + keyLength + key + value + mode;\\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' + '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}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507637},{"Type":1,"NewValue":"{\"Id\":3317,\"Name\":\"Working Mode\",\"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 localTesting = \\\"False\\\";\\r\\nif (localTesting) var params = {\\r\\n 'CycleInterval': {\\r\\n 'CycleInterval': 10,\\r\\n 'LazyCycleInterval': 60\\r\\n },\\r\\n 'WorkingMode': {\\r\\n 'Mode': '06'\\r\\n }\\r\\n};\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Select Communicate behaviour of the Rio.\\r\\n// Cycle = C; Heartbeat = H; Lazy Cycle = LC. \\r\\n//Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\\r\\n// load parameters Cycle interval and Lazy cycle interval\\r\\nif (params.CycleInterval.CycleInterval) {\\r\\n var cycleInterval = parseInt(params.CycleInterval.CycleInterval) * 60;\\r\\n} else var cycleInterval = 600;\\r\\nif (params.CycleInterval.LazyCycleInterval) {\\r\\n var lazyCycleInterval = parseInt(params.CycleInterval.LazyCycleInterval) * 60;\\r\\n} else var lazyCycleInterval = 3600;\\r\\n// Check selected working mode\\r\\nif (params.WorkingMode.Mode) {\\r\\n var mode = params.WorkingMode.Mode;\\r\\n} else {\\r\\n var mode = '06';\\r\\n} // default mode 6\\r\\nswitch (mode) {\\r\\n case '02':\\r\\n case '06':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M,' + lazyCycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '03':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '04':\\r\\n case '05':\\r\\n if (lazyCycleInterval) {\\r\\n var value = parseInt(lazyCycleInterval);\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + lazyCycleInterval / 60 + 'M';\\r\\n } else {\\r\\n var value = 60 * 60; // default value 60*60 seconds\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + 60 + 'M';\\r\\n }\\r\\n break;\\r\\n default:\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = '';\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar keyLength = '05';\\r\\nvar key = '0A';\\r\\nvar messageBody = command + keyLength + key + value + mode;\\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' + '0700' + 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 = 'mode' + mode.substring(1) + valueSMS;\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\ndebug(data);\\r\\ndebug(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 debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694865115},{"Type":1,"NewValue":"{\"Id\":3317,\"Name\":\"Working Mode\",\"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 localTesting = \\\"False\\\";\\r\\nif (localTesting) var params = {\\r\\n 'CycleInterval': {\\r\\n 'CycleInterval': 10,\\r\\n 'LazyCycleInterval': 60\\r\\n },\\r\\n 'WorkingMode': {\\r\\n 'Mode': '06'\\r\\n }\\r\\n};\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Select Communicate behaviour of the Rio.\\r\\n// Cycle = C; Heartbeat = H; Lazy Cycle = LC. \\r\\n//Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\\r\\n// load parameters Cycle interval and Lazy cycle interval\\r\\nif (params.CycleInterval.CycleInterval) {\\r\\n var cycleInterval = parseInt(params.CycleInterval.CycleInterval) * 60;\\r\\n} else var cycleInterval = 600;\\r\\nif (params.CycleInterval.LazyCycleInterval) {\\r\\n var lazyCycleInterval = parseInt(params.CycleInterval.LazyCycleInterval) * 60;\\r\\n} else var lazyCycleInterval = 3600;\\r\\n// Check selected working mode\\r\\nif (params.WorkingMode.Mode) {\\r\\n var mode = params.WorkingMode.Mode;\\r\\n} else {\\r\\n var mode = '06';\\r\\n} // default mode 6\\r\\nswitch (mode) {\\r\\n case '02':\\r\\n case '06':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M,' + lazyCycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '03':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '04':\\r\\n case '05':\\r\\n if (lazyCycleInterval) {\\r\\n var value = parseInt(lazyCycleInterval);\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + lazyCycleInterval / 60 + 'M';\\r\\n } else {\\r\\n var value = 60 * 60; // default value 60*60 seconds\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + 60 + 'M';\\r\\n }\\r\\n break;\\r\\n default:\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = '';\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar keyLength = '05';\\r\\nvar key = '0A';\\r\\nvar messageBody = command + keyLength + key + value + mode;\\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' + '0700' + 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 = 'mode' + mode.substring(1) + valueSMS;\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\ndebug(data);\\r\\ndebug(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 debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695909366},{"Type":1,"NewValue":"{\"Id\":3317,\"Name\":\"Working Mode\",\"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 localTesting = \\\"False\\\";\\r\\nif (localTesting) var params = {\\r\\n 'CycleInterval': {\\r\\n 'CycleInterval': 10,\\r\\n 'LazyCycleInterval': 60\\r\\n },\\r\\n 'WorkingMode': {\\r\\n 'Mode': '06'\\r\\n }\\r\\n};\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Select Communicate behaviour of the Rio.\\r\\n// Cycle = C; Heartbeat = H; Lazy Cycle = LC. \\r\\n//Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\\r\\n// load parameters Cycle interval and Lazy cycle interval\\r\\nif (params.CycleInterval.CycleInterval) {\\r\\n var cycleInterval = parseInt(params.CycleInterval.CycleInterval) * 60;\\r\\n} else var cycleInterval = 600;\\r\\nif (params.CycleInterval.LazyCycleInterval) {\\r\\n var lazyCycleInterval = parseInt(params.CycleInterval.LazyCycleInterval) * 60;\\r\\n} else var lazyCycleInterval = 3600;\\r\\n// Check selected working mode\\r\\nif (params.WorkingMode.Mode) {\\r\\n var mode = params.WorkingMode.Mode;\\r\\n} else {\\r\\n var mode = '06';\\r\\n} // default mode 6\\r\\nswitch (mode) {\\r\\n case '02':\\r\\n case '06':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M,' + lazyCycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '03':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '04':\\r\\n case '05':\\r\\n if (lazyCycleInterval) {\\r\\n var value = parseInt(lazyCycleInterval);\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + lazyCycleInterval / 60 + 'M';\\r\\n } else {\\r\\n var value = 60 * 60; // default value 60*60 seconds\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + 60 + 'M';\\r\\n }\\r\\n break;\\r\\n default:\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = '';\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar keyLength = '05';\\r\\nvar key = '0A';\\r\\nvar messageBody = command + keyLength + key + value + mode;\\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' + '0700' + 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 = 'mode' + mode.substring(1) + valueSMS;\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\ndebug(data);\\r\\ndebug(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 debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":1,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1696074187},{"Type":1,"NewValue":"{\"Id\":3317,\"Name\":\"Working Mode\",\"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 localTesting = \\\"False\\\";\\r\\nif (localTesting) var params = {\\r\\n 'CycleInterval': {\\r\\n 'CycleInterval': 10,\\r\\n 'LazyCycleInterval': 60\\r\\n },\\r\\n 'WorkingMode': {\\r\\n 'Mode': '06'\\r\\n }\\r\\n};\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Select Communicate behaviour of the Rio.\\r\\n// Cycle = C; Heartbeat = H; Lazy Cycle = LC. \\r\\n//Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\\r\\n// load parameters Cycle interval and Lazy cycle interval\\r\\nif (params.CycleInterval.CycleInterval) {\\r\\n var cycleInterval = parseInt(params.CycleInterval.CycleInterval) * 60;\\r\\n} else var cycleInterval = 600;\\r\\nif (params.CycleInterval.LazyCycleInterval) {\\r\\n var lazyCycleInterval = parseInt(params.CycleInterval.LazyCycleInterval) * 60;\\r\\n} else var lazyCycleInterval = 3600;\\r\\n// Check selected working mode\\r\\nif (params.WorkingMode.Mode) {\\r\\n var mode = params.WorkingMode.Mode;\\r\\n} else {\\r\\n var mode = '06';\\r\\n} // default mode 6\\r\\nswitch (mode) {\\r\\n case '02':\\r\\n case '06':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M,' + lazyCycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '03':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '04':\\r\\n case '05':\\r\\n if (lazyCycleInterval) {\\r\\n var value = parseInt(lazyCycleInterval);\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + lazyCycleInterval / 60 + 'M';\\r\\n } else {\\r\\n var value = 60 * 60; // default value 60*60 seconds\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + 60 + 'M';\\r\\n }\\r\\n break;\\r\\n default:\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = '';\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar keyLength = '05';\\r\\nvar key = '0A';\\r\\nvar messageBody = command + keyLength + key + value + mode;\\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' + '0700' + 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 = 'mode' + mode.substring(1) + valueSMS;\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\ndebug(data);\\r\\ndebug(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 debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1697011851},{"Type":1,"NewValue":"{\"Id\":3317,\"Name\":\"Working Mode\",\"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 localTesting = \\\"False\\\";\\r\\nif (localTesting) var params = {\\r\\n 'CycleInterval': {\\r\\n 'CycleInterval': 10,\\r\\n 'LazyCycleInterval': 60\\r\\n },\\r\\n 'WorkingMode': {\\r\\n 'Mode': '06'\\r\\n }\\r\\n};\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Select Communicate behaviour of the Rio.\\r\\n// Cycle = C; Heartbeat = H; Lazy Cycle = LC. \\r\\n//Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\\r\\n// load parameters Cycle interval and Lazy cycle interval\\r\\nif (params.CycleInterval.CycleInterval) {\\r\\n var cycleInterval = parseInt(params.CycleInterval.CycleInterval) * 60;\\r\\n} else var cycleInterval = 600;\\r\\nif (params.CycleInterval.LazyCycleInterval) {\\r\\n var lazyCycleInterval = parseInt(params.CycleInterval.LazyCycleInterval) * 60;\\r\\n} else var lazyCycleInterval = 3600;\\r\\n// Check selected working mode\\r\\nif (params.WorkingMode.Mode) {\\r\\n var mode = params.WorkingMode.Mode;\\r\\n} else {\\r\\n var mode = '06';\\r\\n} // default mode 6\\r\\n// improve command to add both GPRS and SMS comunication\\r\\nswitch (mode) {\\r\\n case '02':\\r\\n case '06':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M,' + lazyCycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '03':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '04':\\r\\n case '05':\\r\\n if (lazyCycleInterval) {\\r\\n var value = parseInt(lazyCycleInterval);\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + lazyCycleInterval / 60 + 'M';\\r\\n } else {\\r\\n var value = 60 * 60; // default value 60*60 seconds\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + 60 + 'M';\\r\\n }\\r\\n break;\\r\\n default:\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = '';\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar keyLength = '05';\\r\\nvar key = '0A';\\r\\nvar messageBody = command + keyLength + key + value + mode;\\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' + '0700' + 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 = 'mode' + mode.substring(1) + valueSMS;\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\ndebug(data);\\r\\ndebug(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 debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707755363},{"Type":1,"NewValue":"{\"Id\":3317,\"Name\":\"Working Mode\",\"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 localTesting = false;\\r\\nif (localTesting) var params = {\\r\\n 'CycleInterval': {\\r\\n 'CycleInterval': 10,\\r\\n 'LazyCycleInterval': 60\\r\\n },\\r\\n 'WorkingMode': {\\r\\n 'Mode': '06'\\r\\n }\\r\\n};\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Select Communicate behaviour of the Rio.\\r\\n// Cycle = C; Heartbeat = H; Lazy Cycle = LC. \\r\\n//Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\\r\\n// load parameters Cycle interval and Lazy cycle interval\\r\\nif (params.CycleInterval.CycleInterval) {\\r\\n var cycleInterval = parseInt(params.CycleInterval.CycleInterval) * 60;\\r\\n} else var cycleInterval = 600;\\r\\nif (params.CycleInterval.LazyCycleInterval) {\\r\\n var lazyCycleInterval = parseInt(params.CycleInterval.LazyCycleInterval) * 60;\\r\\n} else var lazyCycleInterval = 3600;\\r\\n// Check selected working mode\\r\\nif (params.WorkingMode.Mode) {\\r\\n var mode = params.WorkingMode.Mode;\\r\\n} else {\\r\\n var mode = '06';\\r\\n} // default mode 6\\r\\n// improve command to add both GPRS and SMS comunication\\r\\nswitch (mode) {\\r\\n case '02':\\r\\n case '06':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M,' + lazyCycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '03':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '04':\\r\\n case '05':\\r\\n if (lazyCycleInterval) {\\r\\n var value = parseInt(lazyCycleInterval);\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + lazyCycleInterval / 60 + 'M';\\r\\n } else {\\r\\n var value = 60 * 60; // default value 60*60 seconds\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + 60 + 'M';\\r\\n }\\r\\n break;\\r\\n default:\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = '';\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar keyLength = '05';\\r\\nvar key = '0A';\\r\\nvar messageBody = command + keyLength + key + value + mode;\\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' + '0700' + 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 = 'mode' + mode.substring(1) + valueSMS;\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\ndebug(data);\\r\\ndebug(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 debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707850781},{"Type":1,"NewValue":"{\"Id\":3317,\"Name\":\"Working Mode\",\"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 localTesting = false;\\r\\nif (localTesting) var params = {\\r\\n 'CycleInterval': {\\r\\n 'CycleInterval': 10,\\r\\n 'LazyCycleInterval': 60\\r\\n },\\r\\n 'WorkingMode': {\\r\\n 'Mode': '06'\\r\\n }\\r\\n};\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Select Communicate behaviour of the Rio.\\r\\n// Cycle = C; Heartbeat = H; Lazy Cycle = LC. \\r\\n//Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\\r\\n// load parameters Cycle interval and Lazy cycle interval\\r\\nif (params.CycleInterval.CycleInterval) {\\r\\n var cycleInterval = parseInt(params.CycleInterval.CycleInterval) * 60;\\r\\n} else var cycleInterval = 600;\\r\\nif (params.CycleInterval.LazyCycleInterval) {\\r\\n var lazyCycleInterval = parseInt(params.CycleInterval.LazyCycleInterval) * 60;\\r\\n} else var lazyCycleInterval = 3600;\\r\\n// Check selected working mode\\r\\nif (params.WorkingMode.Mode) {\\r\\n var mode = params.WorkingMode.Mode;\\r\\n} else {\\r\\n var mode = '06';\\r\\n} // default mode 6\\r\\n// improve command to add both GPRS and SMS comunication\\r\\nswitch (mode) {\\r\\n case '02':\\r\\n case '06':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M,' + lazyCycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '03':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '04':\\r\\n case '05': // add time interval to the command\\r\\n if (cycleInterval) {\\r\\n var value = parseInt(cycleInterval);\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M';\\r\\n } else {\\r\\n var value = 60 * 60; // default value 60*60 seconds\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + 60 + 'M';\\r\\n }\\r\\n break;\\r\\n default:\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = '';\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar keyLength = '05';\\r\\nvar key = '0A';\\r\\nvar messageBody = command + keyLength + key + value + mode;\\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' + '0700' + 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 = 'mode' + mode.substring(1) + valueSMS;\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\ndebug(data);\\r\\ndebug(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 debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1733949050}],"Tags":[{"Id":1647,"Name":"thirdCommand","BackendAction":"commandPriority","Value":"2"}]},{"Id":3318,"Name":"RingTone Volume","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.RingToneVolume.Volume) {\n var volume = parseInt(params.RingToneVolume.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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3318,\"Name\":\"RingTone Volume\",\"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.RingToneVolume.Volume) {\\n var volume = parseInt(params.RingToneVolume.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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692228},{"Type":1,"NewValue":"{\"Id\":3318,\"Name\":\"RingTone Volume\",\"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.RingToneVolume.Volume) {\\n var volume = parseInt(params.RingToneVolume.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\":[]}","Timestamp":1695908725}],"Tags":[]},{"Id":3319,"Name":"Speaker Volume","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.SpeakerVolume.Volume) {\n var volume = parseInt(params.SpeakerVolume.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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3319,\"Name\":\"Speaker Volume\",\"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.SpeakerVolume.Volume) {\\n var volume = parseInt(params.SpeakerVolume.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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692359},{"Type":1,"NewValue":"{\"Id\":3319,\"Name\":\"Speaker Volume\",\"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.SpeakerVolume.Volume) {\\n var volume = parseInt(params.SpeakerVolume.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\":[]}","Timestamp":1695909040}],"Tags":[]},{"Id":3320,"Name":"Alarm Clock 1","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3320,\"Name\":\"Alarm Clock 1\",\"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\":[]}","Timestamp":1695907904}],"Tags":[]},{"Id":3321,"Name":"No Disturb","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.NoDisturb.EnableDisableNoDisturb == 'true') {\n var flag = '80';\n if (params.NoDisturb.Start) {\n var hourStart = params.NoDisturb.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.NoDisturb.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.NoDisturb.End) {\n var hourEnd = params.NoDisturb.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.NoDisturb.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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3321,\"Name\":\"No Disturb\",\"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.NoDisturb.EnableDisableNoDisturb == 'true') {\\n var flag = '80';\\n if (params.NoDisturb.Start) {\\n var hourStart = params.NoDisturb.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.NoDisturb.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.NoDisturb.End) {\\n var hourEnd = params.NoDisturb.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.NoDisturb.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\":[]}","Timestamp":1695908583},{"Type":1,"NewValue":"{\"Id\":3321,\"Name\":\"No Disturb\",\"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\":[]}","Timestamp":1698145878}],"Tags":[]},{"Id":3322,"Name":"Speed Dial","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.SpeedDialButtonSettings.EnableDisableSpeedDial == 'true') {\n value += '10';\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 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3322,\"Name\":\"Speed Dial\",\"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.SpeedDialButtonSettings.EnableDisableSpeedDial == 'true') {\\n value += '10';\\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 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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692383},{"Type":1,"NewValue":"{\"Id\":3322,\"Name\":\"Speed Dial\",\"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.SpeedDialButtonSettings.EnableDisableSpeedDial == 'true') {\\n value += '10';\\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 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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695909062},{"Type":1,"NewValue":"{\"Id\":3322,\"Name\":\"Speed Dial\",\"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.SpeedDialButtonSettings.EnableDisableSpeedDial == 'true') {\\n value += '10';\\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 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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695935979},{"Type":1,"NewValue":"{\"Id\":3322,\"Name\":\"Speed Dial\",\"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.SpeedDialButtonSettings.EnableDisableSpeedDial == 'true') {\\n value += '10';\\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 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\":[]}","Timestamp":1696443459}],"Tags":[]},{"Id":3323,"Name":"Motion Alert","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3323,\"Name\":\"Motion Alert\",\"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\":[]}","Timestamp":1695908563}],"Tags":[]},{"Id":3324,"Name":"No Motion Alert","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.NonMovementAlert.EnableDisableNoMotionAlert == 'true') {\n value += '1'\n if (params.NonMovementAlert.Dial == 'true') {\n value += '1'\n } else {\n value += '0'\n }\n if (params.NonMovementAlert.Time) {\n var time = ('000000000000000000000000000000' + decimalToBinary(params.NonMovementAlert.Time)).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)\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3324,\"Name\":\"No Motion Alert\",\"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.NonMovementAlert.EnableDisableNoMotionAlert == 'true') {\\n value += '1'\\n if (params.NonMovementAlert.Dial == 'true') {\\n value += '1'\\n } else {\\n value += '0'\\n }\\n if (params.NonMovementAlert.Time) {\\n var time = ('000000000000000000000000000000' + decimalToBinary(params.NonMovementAlert.Time)).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)\\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\":[]}","Timestamp":1695908608}],"Tags":[]},{"Id":3325,"Name":"Request Location","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":true,"Order":null,"SendAttempts":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3325,\"Name\":\"Request Location\",\"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\":true,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908709}],"Tags":[]},{"Id":3326,"Name":"Set Authorised Number 5","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\nif (params.WhiteListNumber5.EnableDisableWhiteListNumber5 == '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.WhiteListNumber5.Call == 'true') {\r\n value += '1'; // Togle Call\r\n} else {\r\n value += '0';\r\n} // Untogle Call\r\nif (params.WhiteListNumber5.Number) {\r\n //Authorised number 7\r\n value += '00110'; // No SIM Dialing + Contact Number 7\r\n var number = params.WhiteListNumber5.Number;\r\n numberHex = ascii_to_hexa(number).toUpperCase();\r\n} else {\r\n value += '00110';\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\n// select version\r\nswitch (params.DeviceVersion.DeviceVersion) {\r\n case '1':\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n case '2':\r\n var key = '34';\r\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\r\n if (params.WhiteListNumber5.Name) {\r\n var nameContact = params.WhiteListNumber5.Name;\r\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\r\n } else {\r\n var nameHex = ascii_to_hexa('Contact5').toUpperCase();\r\n }\r\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\r\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\r\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n default:\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n}\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3326,\"Name\":\"Set Authorised Number 5\",\"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\\nif (params.WhiteListNumber5.EnableDisableWhiteListNumber5 == '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.WhiteListNumber5.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.WhiteListNumber5.Number) {\\r\\n //Authorised number 7\\r\\n value += '00110'; // No SIM Dialing + Contact Number 7\\r\\n var number = params.WhiteListNumber5.Number;\\r\\n numberHex = ascii_to_hexa(number).toUpperCase();\\r\\n} else {\\r\\n value += '00110';\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.WhiteListNumber5.Name) {\\r\\n var nameContact = params.WhiteListNumber5.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Contact5').toUpperCase();\\r\\n }\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908820}],"Tags":[]},{"Id":3328,"Name":"SMS Password","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3328,\"Name\":\"SMS Password\",\"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\":[]}","Timestamp":1695908977}],"Tags":[]},{"Id":3329,"Name":"Find Device","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 sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '04'\nvar keyLength = '01'\nvar key = '13'\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)\n//Hpw to calculate sequenceID\n// 11/07 change 18 in prefix by 10\nvar prefix = 'AB10' + '0300' + 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3329,\"Name\":\"Find Device\",\"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 sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\\nvar command = '04'\\nvar keyLength = '01'\\nvar key = '13'\\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)\\n//Hpw to calculate sequenceID\\n// 11/07 change 18 in prefix by 10\\nvar prefix = 'AB10' + '0300' + 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\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908450},{"Type":1,"NewValue":"{\"Id\":3329,\"Name\":\"Find Device\",\"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 sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\\nvar command = '04'\\nvar keyLength = '01'\\nvar key = '13'\\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)\\n//Hpw to calculate sequenceID\\n// 11/07 change 18 in prefix by 10\\nvar prefix = 'AB10' + '0300' + 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\":[]}","Timestamp":1695909472}],"Tags":[]},{"Id":3330,"Name":"Tilt Alert","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3330,\"Name\":\"Tilt Alert\",\"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\":34,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692419},{"Type":1,"NewValue":"{\"Id\":3330,\"Name\":\"Tilt Alert\",\"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\":[]}","Timestamp":1695909174}],"Tags":[]},{"Id":3331,"Name":"Phone Settings","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 = '00000000000000000000'\nif (params.PhoneSettings.SMSWhiteList == 'true') {\n value += '10'\n} else {\n value += '00'\n}\nif (params.PhoneSettings.ButtonHangUp == 'true') {\n value += '1'\n} else {\n value += '0'\n}\nif (params.PhoneSettings.WhiteList == 'true') {\n value += '1'\n} else {\n value += '0'\n}\nif (params.PhoneSettings.AutoAnswer == 'true') {\n value += '1'\n value += ('0000000' + decimalToBinary(parseInt(params.PhoneSettings.AutoAnswerAfterRings))).slice(-7)\n} else {\n value += '00000000'\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 = '33'\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3331,\"Name\":\"Phone Settings\",\"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\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694531081},{"Type":1,"NewValue":"{\"Id\":3331,\"Name\":\"Phone Settings\",\"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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692178},{"Type":1,"NewValue":"{\"Id\":3331,\"Name\":\"Phone Settings\",\"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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908646},{"Type":1,"NewValue":"{\"Id\":3331,\"Name\":\"Phone Settings\",\"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\":[]}","Timestamp":1695939190}],"Tags":[]},{"Id":3332,"Name":"Mic Volume","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3332,\"Name\":\"Mic Volume\",\"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\":[]}","Timestamp":1695908524}],"Tags":[]},{"Id":3333,"Name":"Delete Records","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 sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '04';\nvar keyLength = '01';\nvar key = '10';\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);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0300' + 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":[{"Type":1,"NewValue":"{\"Id\":3333,\"Name\":\"Delete Records\",\"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 sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\nvar command = '04';\\nvar keyLength = '01';\\nvar key = '10';\\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);\\n//Hpw to calculate sequenceID\\nvar prefix = 'AB10' + '0300' + 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\":[]}","Timestamp":1695908318},{"Type":1,"NewValue":"{\"Id\":3333,\"Name\":\"Delete Records\",\"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 sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\nvar command = '04';\\nvar keyLength = '01';\\nvar key = '10';\\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);\\n//Hpw to calculate sequenceID\\nvar prefix = 'AB10' + '0300' + 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\":3,\"HasAck\":true,\"HexString\":true,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1708013025}],"Tags":[]},{"Id":3334,"Name":"Set Authorised Number 1","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\nif (params.WhiteListNumber1.EnableDisableWhiteListNumber1 == '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.WhiteListNumber1.Call == 'true') {\r\n value += '1'; // Togle Call\r\n} else {\r\n value += '0';\r\n} // Untogle Call\r\nif (params.WhiteListNumber1.Number) {\r\n //Authorised number 3\r\n value += '00010'; // No SIM Dialing + Contact Number 3\r\n var number = params.WhiteListNumber1.Number;\r\n numberHex = ascii_to_hexa(number).toUpperCase();\r\n} else {\r\n value += '00010';\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\n// select version\r\nswitch (params.DeviceVersion.DeviceVersion) {\r\n case '1':\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n case '2':\r\n var key = '34';\r\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\r\n if (params.WhiteListNumber1.Name) {\r\n var nameContact = params.WhiteListNumber1.Name;\r\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\r\n } else {\r\n var nameHex = ascii_to_hexa('Contact1').toUpperCase();\r\n }\r\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\r\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\r\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n default:\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n}\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3334,\"Name\":\"Set Authorised Number 1\",\"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\\nif (params.WhiteListNumber1.EnableDisableWhiteListNumber1 == '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.WhiteListNumber1.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.WhiteListNumber1.Number) {\\r\\n //Authorised number 3\\r\\n value += '00010'; // No SIM Dialing + Contact Number 3\\r\\n var number = params.WhiteListNumber1.Number;\\r\\n numberHex = ascii_to_hexa(number).toUpperCase();\\r\\n} else {\\r\\n value += '00010';\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.WhiteListNumber1.Name) {\\r\\n var nameContact = params.WhiteListNumber1.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Contact1').toUpperCase();\\r\\n }\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908749}],"Tags":[]},{"Id":3335,"Name":"Continuous Locate","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3335,\"Name\":\"Continuous Locate\",\"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\":4,\"SendAttempts\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694506592},{"Type":1,"NewValue":"{\"Id\":3335,\"Name\":\"Continuous Locate\",\"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\":4,\"SendAttempts\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694506608},{"Type":1,"NewValue":"{\"Id\":3335,\"Name\":\"Continuous Locate\",\"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\":4,\"SendAttempts\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692011},{"Type":1,"NewValue":"{\"Id\":3335,\"Name\":\"Continuous Locate\",\"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\":4,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908255},{"Type":1,"NewValue":"{\"Id\":3335,\"Name\":\"Continuous Locate\",\"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\":4,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695912146}],"Tags":[{"Id":1642,"Name":"fifthCommand","BackendAction":"commandPriority","Value":"4"}]},{"Id":3336,"Name":"Initialize Mileage","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3336,\"Name\":\"Initialize Mileage\",\"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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908503}],"Tags":[]},{"Id":3337,"Name":"Set Authorised Number 7","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\nif (params.WhiteListNumber7.EnableDisableWhiteListNumber7 == '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.WhiteListNumber7.Call == 'true') {\r\n value += '1'; // Togle Call\r\n} else {\r\n value += '0';\r\n} // Untogle Call\r\nif (params.WhiteListNumber7.Number) {\r\n //Authorised number 9\r\n value += '01000'; // No SIM Dialing + Contact Number 9\r\n var number = params.WhiteListNumber7.Number;\r\n numberHex = ascii_to_hexa(number).toUpperCase();\r\n} else {\r\n value += '01000';\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\n// select version\r\nswitch (params.DeviceVersion.DeviceVersion) {\r\n case '1':\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n case '2':\r\n var key = '34';\r\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\r\n if (params.WhiteListNumber7.Name) {\r\n var nameContact = params.WhiteListNumber7.Name;\r\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\r\n } else {\r\n var nameHex = ascii_to_hexa('Contact7').toUpperCase();\r\n }\r\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\r\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\r\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n default:\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n}\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3337,\"Name\":\"Set Authorised Number 7\",\"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\\nif (params.WhiteListNumber7.EnableDisableWhiteListNumber7 == '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.WhiteListNumber7.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.WhiteListNumber7.Number) {\\r\\n //Authorised number 9\\r\\n value += '01000'; // No SIM Dialing + Contact Number 9\\r\\n var number = params.WhiteListNumber7.Number;\\r\\n numberHex = ascii_to_hexa(number).toUpperCase();\\r\\n} else {\\r\\n value += '01000';\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.WhiteListNumber7.Name) {\\r\\n var nameContact = params.WhiteListNumber7.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Contact7').toUpperCase();\\r\\n }\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908858}],"Tags":[]},{"Id":3338,"Name":"Set Authorised Number 8","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\nif (params.WhiteListNumber8.EnableDisableWhiteListNumber8 == '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.WhiteListNumber8.Call == 'true') {\r\n value += '1'; // Togle Call\r\n} else {\r\n value += '0';\r\n} // Untogle Call\r\nif (params.WhiteListNumber8.Number) {\r\n //Authorised number 10\r\n value += '01001'; // No SIM Dialing + Contact Number 10\r\n var number = params.WhiteListNumber8.Number;\r\n numberHex = ascii_to_hexa(number).toUpperCase();\r\n} else {\r\n value += '01001';\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\n// select version\r\nswitch (params.DeviceVersion.DeviceVersion) {\r\n case '1':\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n case '2':\r\n var key = '34';\r\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\r\n if (params.WhiteListNumber8.Name) {\r\n var nameContact = params.WhiteListNumber8.Name;\r\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\r\n } else {\r\n var nameHex = ascii_to_hexa('Contact8').toUpperCase();\r\n }\r\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\r\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\r\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n default:\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n}\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3338,\"Name\":\"Set Authorised Number 8\",\"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\\nif (params.WhiteListNumber8.EnableDisableWhiteListNumber8 == '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.WhiteListNumber8.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.WhiteListNumber8.Number) {\\r\\n //Authorised number 10\\r\\n value += '01001'; // No SIM Dialing + Contact Number 10\\r\\n var number = params.WhiteListNumber8.Number;\\r\\n numberHex = ascii_to_hexa(number).toUpperCase();\\r\\n} else {\\r\\n value += '01001';\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.WhiteListNumber8.Name) {\\r\\n var nameContact = params.WhiteListNumber8.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Contact8').toUpperCase();\\r\\n }\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908883}],"Tags":[]},{"Id":3339,"Name":"Set Authorised Number 6","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\nif (params.WhiteListNumber6.EnableDisableWhiteListNumber6 == '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.WhiteListNumber6.Call == 'true') {\r\n value += '1'; // Togle Call\r\n} else {\r\n value += '0';\r\n} // Untogle Call\r\nif (params.WhiteListNumber6.Number) {\r\n //Authorised number 8\r\n value += '00111'; // No SIM Dialing + Contact Number 8\r\n var number = params.WhiteListNumber6.Number;\r\n numberHex = ascii_to_hexa(number).toUpperCase();\r\n} else {\r\n value += '00111';\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\n// select version\r\nswitch (params.DeviceVersion.DeviceVersion) {\r\n case '1':\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n case '2':\r\n var key = '34';\r\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\r\n if (params.WhiteListNumber6.Name) {\r\n var nameContact = params.WhiteListNumber6.Name;\r\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\r\n } else {\r\n var nameHex = ascii_to_hexa('Contact6').toUpperCase();\r\n }\r\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\r\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\r\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n default:\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n}\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":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3339,\"Name\":\"Set Authorised Number 6\",\"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\\nif (params.WhiteListNumber6.EnableDisableWhiteListNumber6 == '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.WhiteListNumber6.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.WhiteListNumber6.Number) {\\r\\n //Authorised number 8\\r\\n value += '00111'; // No SIM Dialing + Contact Number 8\\r\\n var number = params.WhiteListNumber6.Number;\\r\\n numberHex = ascii_to_hexa(number).toUpperCase();\\r\\n} else {\\r\\n value += '00111';\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.WhiteListNumber6.Name) {\\r\\n var nameContact = params.WhiteListNumber6.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Contact6').toUpperCase();\\r\\n }\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":0,\"HasAck\":true,\"HexString\":true,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908837}],"Tags":[]},{"Id":3293,"Name":"Set SOS Number","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 numberHex = '';\nvar value = '';\n// For Rio\nif (params.SOSButtonSettings.EnableDisableSOSButtonSettings == 'true') {\n value += '10'; // Enable + Not accept SMS\n} else {\n value += '00';\n} // Disable + not accept SMS\nif (params.SOSButtonSettings.Call == 'true') {\n value += '1'; // Togle Call\n} else {\n value += '0';\n} // Untogle Call\nif (params.SOSButtonSettings.Number) {\n value += '00000'; // No SIM Dialing + Contact Number 1\n var number = params.SOSButtonSettings.Number;\n numberHex = ascii_to_hexa(number).toUpperCase();\n} else {\n value += '00000';\n}\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\n// select version\nswitch (params.DeviceVersion.DeviceVersion) {\n case '1':\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\n var key = '30';\n var messageBody = command + keyLength + key + value + numberHex;\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\n break;\n case '2':\n var key = '34';\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase(); //decimalToHex(number.length); // check numberLenght Automatic 0C Spanish or 0D English number\n var keyLength = ('00' + decimalToHex(8 + (numberHex.length / 2))).slice(-2).toUpperCase();\n var messageBody = command + keyLength + key + value + numberLength + numberHex + '03534F5300'; // 03534F5300 nameLenght 03 + name 'SOS' to hex\n var totalLenght = ('0000' + decimalToHex(10 + (numberHex.length / 2))).slice(-4).toUpperCase();\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\n break;\n default:\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\n var key = '30';\n var messageBody = command + keyLength + key + value + numberHex;\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\n break;\n}\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' + 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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3293,\"Name\":\"Set SOS Number\",\"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 numberHex = '';\\nvar value = '';\\n// For Rio\\nif (params.SOSButtonSettings.EnableDisableSOSButtonSettings == 'true') {\\n value += '10'; // Enable + Not accept SMS\\n} else {\\n value += '00';\\n} // Disable + not accept SMS\\nif (params.SOSButtonSettings.Call == 'true') {\\n value += '1'; // Togle Call\\n} else {\\n value += '0';\\n} // Untogle Call\\nif (params.SOSButtonSettings.Number) {\\n value += '00000'; // No SIM Dialing + Contact Number 1\\n var number = params.SOSButtonSettings.Number;\\n numberHex = ascii_to_hexa(number).toUpperCase();\\n} else {\\n value += '00000';\\n}\\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\nvar command = '02';\\n// select version\\nswitch (params.DeviceVersion.DeviceVersion) {\\n case '1':\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var key = '30';\\n var messageBody = command + keyLength + key + value + numberHex;\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n case '2':\\n var key = '34';\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase(); //decimalToHex(number.length); // check numberLenght Automatic 0C Spanish or 0D English number\\n var keyLength = ('00' + decimalToHex(8 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + '03534F5300'; // 03534F5300 nameLenght 03 + name 'SOS' to hex\\n var totalLenght = ('0000' + decimalToHex(10 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n default:\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var key = '30';\\n var messageBody = command + keyLength + key + value + numberHex;\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n}\\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' + 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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692256},{"Type":1,"NewValue":"{\"Id\":3293,\"Name\":\"Set SOS Number\",\"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 numberHex = '';\\nvar value = '';\\n// For Rio\\nif (params.SOSButtonSettings.EnableDisableSOSButtonSettings == 'true') {\\n value += '10'; // Enable + Not accept SMS\\n} else {\\n value += '00';\\n} // Disable + not accept SMS\\nif (params.SOSButtonSettings.Call == 'true') {\\n value += '1'; // Togle Call\\n} else {\\n value += '0';\\n} // Untogle Call\\nif (params.SOSButtonSettings.Number) {\\n value += '00000'; // No SIM Dialing + Contact Number 1\\n var number = params.SOSButtonSettings.Number;\\n numberHex = ascii_to_hexa(number).toUpperCase();\\n} else {\\n value += '00000';\\n}\\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\nvar command = '02';\\n// select version\\nswitch (params.DeviceVersion.DeviceVersion) {\\n case '1':\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var key = '30';\\n var messageBody = command + keyLength + key + value + numberHex;\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n case '2':\\n var key = '34';\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase(); //decimalToHex(number.length); // check numberLenght Automatic 0C Spanish or 0D English number\\n var keyLength = ('00' + decimalToHex(8 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + '03534F5300'; // 03534F5300 nameLenght 03 + name 'SOS' to hex\\n var totalLenght = ('0000' + decimalToHex(10 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n default:\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var key = '30';\\n var messageBody = command + keyLength + key + value + numberHex;\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n}\\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' + 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\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908924},{"Type":1,"NewValue":"{\"Id\":3293,\"Name\":\"Set SOS Number\",\"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 numberHex = '';\\nvar value = '';\\n// For Rio\\nif (params.SOSButtonSettings.EnableDisableSOSButtonSettings == 'true') {\\n value += '10'; // Enable + Not accept SMS\\n} else {\\n value += '00';\\n} // Disable + not accept SMS\\nif (params.SOSButtonSettings.Call == 'true') {\\n value += '1'; // Togle Call\\n} else {\\n value += '0';\\n} // Untogle Call\\nif (params.SOSButtonSettings.Number) {\\n value += '00000'; // No SIM Dialing + Contact Number 1\\n var number = params.SOSButtonSettings.Number;\\n numberHex = ascii_to_hexa(number).toUpperCase();\\n} else {\\n value += '00000';\\n}\\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\nvar command = '02';\\n// select version\\nswitch (params.DeviceVersion.DeviceVersion) {\\n case '1':\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var key = '30';\\n var messageBody = command + keyLength + key + value + numberHex;\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n case '2':\\n var key = '34';\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase(); //decimalToHex(number.length); // check numberLenght Automatic 0C Spanish or 0D English number\\n var keyLength = ('00' + decimalToHex(8 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + '03534F5300'; // 03534F5300 nameLenght 03 + name 'SOS' to hex\\n var totalLenght = ('0000' + decimalToHex(10 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n default:\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var key = '30';\\n var messageBody = command + keyLength + key + value + numberHex;\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n}\\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' + 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\":[]}","Timestamp":1695909519},{"Type":1,"NewValue":"{\"Id\":3293,\"Name\":\"Set SOS Number\",\"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 numberHex = '';\\nvar value = '';\\n// For Rio\\nif (params.SOSButtonSettings.EnableDisableSOSButtonSettings == 'true') {\\n value += '10'; // Enable + Not accept SMS\\n} else {\\n value += '00';\\n} // Disable + not accept SMS\\nif (params.SOSButtonSettings.Call == 'true') {\\n value += '1'; // Togle Call\\n} else {\\n value += '0';\\n} // Untogle Call\\nif (params.SOSButtonSettings.Number) {\\n value += '00000'; // No SIM Dialing + Contact Number 1\\n var number = params.SOSButtonSettings.Number;\\n numberHex = ascii_to_hexa(number).toUpperCase();\\n} else {\\n value += '00000';\\n}\\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\nvar command = '02';\\n// select version\\nswitch (params.DeviceVersion.DeviceVersion) {\\n case '1':\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var key = '30';\\n var messageBody = command + keyLength + key + value + numberHex;\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n case '2':\\n var key = '34';\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase(); //decimalToHex(number.length); // check numberLenght Automatic 0C Spanish or 0D English number\\n var keyLength = ('00' + decimalToHex(8 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + '03534F5300'; // 03534F5300 nameLenght 03 + name 'SOS' to hex\\n var totalLenght = ('0000' + decimalToHex(10 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n default:\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var key = '30';\\n var messageBody = command + keyLength + key + value + numberHex;\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n}\\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' + 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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695911435},{"Type":1,"NewValue":"{\"Id\":3293,\"Name\":\"Set SOS Number\",\"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 numberHex = '';\\nvar value = '';\\n// For Rio\\nif (params.SOSButtonSettings.EnableDisableSOSButtonSettings == 'true') {\\n value += '10'; // Enable + Not accept SMS\\n} else {\\n value += '00';\\n} // Disable + not accept SMS\\nif (params.SOSButtonSettings.Call == 'true') {\\n value += '1'; // Togle Call\\n} else {\\n value += '0';\\n} // Untogle Call\\nif (params.SOSButtonSettings.Number) {\\n value += '00000'; // No SIM Dialing + Contact Number 1\\n var number = params.SOSButtonSettings.Number;\\n numberHex = ascii_to_hexa(number).toUpperCase();\\n} else {\\n value += '00000';\\n}\\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\nvar command = '02';\\n// select version\\nswitch (params.DeviceVersion.DeviceVersion) {\\n case '1':\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var key = '30';\\n var messageBody = command + keyLength + key + value + numberHex;\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n case '2':\\n var key = '34';\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase(); //decimalToHex(number.length); // check numberLenght Automatic 0C Spanish or 0D English number\\n var keyLength = ('00' + decimalToHex(8 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + '03534F5300'; // 03534F5300 nameLenght 03 + name 'SOS' to hex\\n var totalLenght = ('0000' + decimalToHex(10 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n default:\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\n var key = '30';\\n var messageBody = command + keyLength + key + value + numberHex;\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\n break;\\n}\\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' + 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\":6,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695913790}],"Tags":[]},{"Id":3327,"Name":"Cycle","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3327,\"Name\":\"Cycle\",\"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\":3,\"SendAttempts\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694506673},{"Type":1,"NewValue":"{\"Id\":3327,\"Name\":\"Cycle\",\"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\":3,\"SendAttempts\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692025},{"Type":1,"NewValue":"{\"Id\":3327,\"Name\":\"Cycle\",\"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\":3,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908282},{"Type":1,"NewValue":"{\"Id\":3327,\"Name\":\"Cycle\",\"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\":3,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695910701},{"Type":1,"NewValue":"{\"Id\":3327,\"Name\":\"Cycle\",\"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\":3,\"SendAttempts\":3,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695910765},{"Type":1,"NewValue":"{\"Id\":3327,\"Name\":\"Cycle\",\"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\":3,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695910798},{"Type":1,"NewValue":"{\"Id\":3327,\"Name\":\"Cycle\",\"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\":3,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695911874}],"Tags":[{"Id":1643,"Name":"fourthCommand","BackendAction":"commandPriority","Value":"3"}]},{"Id":3291,"Name":"Power Alert","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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3291,\"Name\":\"Power Alert\",\"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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692202},{"Type":1,"NewValue":"{\"Id\":3291,\"Name\":\"Power Alert\",\"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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908668},{"Type":1,"NewValue":"{\"Id\":3291,\"Name\":\"Power Alert\",\"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\":[]}","Timestamp":1696443168},{"Type":1,"NewValue":"{\"Id\":3291,\"Name\":\"Power Alert\",\"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\":6,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1719579441}],"Tags":[]},{"Id":3314,"Name":"APN","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nif (params.SetAPN.SetAPN) {\n var apnString = params.SetAPN.SetAPN.split(',');\n var apn = apnString[0];\n var apn_username = apnString[1];\n var apn_password = apnString[2];\n if (params.SMSPassword.SMSPasswordOld) {\n var data = `${params.SMSPassword.SMSPasswordOld}S1,${apn},${apn_username},${apn_password}`;\n } else {\n var data = `S1,${apn},${apn_username},${apn_password}`;\n }\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":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3314,\"Name\":\"APN\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nif (params.SetAPN.SetAPN) {\\n var apnString = params.SetAPN.SetAPN.split(',');\\n var apn = apnString[0];\\n var apn_username = apnString[1];\\n var apn_password = apnString[2];\\n if (params.SMSPassword.SMSPasswordOld) {\\n var data = `${params.SMSPassword.SMSPasswordOld}S1,${apn},${apn_username},${apn_password}`;\\n } else {\\n var data = `S1,${apn},${apn_username},${apn_password}`;\\n }\\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\":1,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694506496}],"Tags":[{"Id":1641,"Name":"secondCommand","BackendAction":"commandPriority","Value":"1"}]},{"Id":3313,"Name":"Server","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\n//var configs2 = [];\n/*if (params.SMSPassword.SMSPasswordOld) {\n var data2 = `${params.SMSPassword.SMSPasswordOld}prefix1,${serverParams.Imei}`;\n} else {\n var data2 = `prefix1,${serverParams.Imei}`;\n}\nAddValue('data', data2);*/\n//var commandConfigs2 = {\n// template: \"main\",\n// configs: configs2\n//};\n//msg.push(JSON.stringify(commandConfigs2));\nif (params.Server.SetServer) {\n var serverString = params.Server.SetServer.split(',');\n var domain = serverString[0];\n var port = serverString[1];\n if (params.SMSPassword.SMSPasswordOld) {\n var data = `${params.SMSPassword.SMSPasswordOld}IP1,${domain},${port}`;\n } else {\n var data = `IP1,${domain},${port}`;\n }\n}\nAddValue('data', data);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue2(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs2.push(cvpair);\n}\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":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3313,\"Name\":\"Server\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\n//var configs2 = [];\\n/*if (params.SMSPassword.SMSPasswordOld) {\\n var data2 = `${params.SMSPassword.SMSPasswordOld}prefix1,${serverParams.Imei}`;\\n} else {\\n var data2 = `prefix1,${serverParams.Imei}`;\\n}\\nAddValue('data', data2);*/\\n//var commandConfigs2 = {\\n// template: \\\"main\\\",\\n// configs: configs2\\n//};\\n//msg.push(JSON.stringify(commandConfigs2));\\nif (params.Server.SetServer) {\\n var serverString = params.Server.SetServer.split(',');\\n var domain = serverString[0];\\n var port = serverString[1];\\n if (params.SMSPassword.SMSPasswordOld) {\\n var data = `${params.SMSPassword.SMSPasswordOld}IP1,${domain},${port}`;\\n } else {\\n var data = `IP1,${domain},${port}`;\\n }\\n}\\nAddValue('data', data);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue2(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs2.push(cvpair);\\n}\\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\":0,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507326}],"Tags":[{"Id":1646,"Name":"firstCommand","BackendAction":"commandPriority","Value":"0"}]},{"Id":3287,"Name":"Set Authorised Number 3","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\nif (params.WhiteListNumber3.EnableDisableWhiteListNumber3 == '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.WhiteListNumber3.Call == 'true') {\r\n value += '1'; // Togle Call\r\n} else {\r\n value += '0';\r\n} // Untogle Call\r\nif (params.WhiteListNumber3.Number) {\r\n //Authorised number 5\r\n value += '00100'; // No SIM Dialing + Contact Number 5\r\n var number = params.WhiteListNumber3.Number;\r\n numberHex = ascii_to_hexa(number).toUpperCase();\r\n} else {\r\n value += '00100';\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\n// select version\r\nswitch (params.DeviceVersion.DeviceVersion) {\r\n case '1':\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n case '2':\r\n var key = '34';\r\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\r\n if (params.WhiteListNumber3.Name) {\r\n var nameContact = params.WhiteListNumber3.Name;\r\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\r\n } else {\r\n var nameHex = ascii_to_hexa('Contact3').toUpperCase();\r\n }\r\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\r\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\r\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n default:\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n}\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3287,\"Name\":\"Set Authorised Number 3\",\"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\\nif (params.WhiteListNumber3.EnableDisableWhiteListNumber3 == '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.WhiteListNumber3.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.WhiteListNumber3.Number) {\\r\\n //Authorised number 5\\r\\n value += '00100'; // No SIM Dialing + Contact Number 5\\r\\n var number = params.WhiteListNumber3.Number;\\r\\n numberHex = ascii_to_hexa(number).toUpperCase();\\r\\n} else {\\r\\n value += '00100';\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.WhiteListNumber3.Name) {\\r\\n var nameContact = params.WhiteListNumber3.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Contact3').toUpperCase();\\r\\n }\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908787}],"Tags":[]},{"Id":3284,"Name":"Speed Dial Number","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 Rio and watch\r\nif (params.SpeedDialButtonSettings.EnableDisableSpeedDial == 'true') {\r\n value += '10'; // Enable + Not accept SMS\r\n} else {\r\n value += '00'; // Disable + not accept SMS\r\n}\r\nif (params.SpeedDialButtonSettings.Call == 'true') {\r\n value += '1'; // Togle Call\r\n} else {\r\n value += '0';\r\n} // Untogle Call\r\nif (params.SpeedDialButtonSettings.Number) {\r\n value += '00001'; // No SIM Dialing + Contact Number 2\r\n var number = params.SpeedDialButtonSettings.Number;\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\n// select version\r\nswitch (params.DeviceVersion.DeviceVersion) {\r\n case '1':\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n case '2':\r\n var key = '34';\r\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\r\n if (params.SpeedDialButtonSettings.Name) {\r\n var nameContact = params.SpeedDialButtonSettings.Name;\r\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\r\n } else {\r\n var nameHex = ascii_to_hexa('Speed').toUpperCase();\r\n }\r\n //nameHex = fillHex(nameLenght / 2, nameHex); // fill with '00' to be odd\r\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\r\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\r\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n default:\r\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n var key = '30';\r\n var messageBody = command + keyLength + key + value + numberHex;\r\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\n break;\r\n}\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":25,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3284,\"Name\":\"Speed Dial Number\",\"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 Rio and watch\\r\\nif (params.SpeedDialButtonSettings.EnableDisableSpeedDial == 'true') {\\r\\n value += '10'; // Enable + Not accept SMS\\r\\n} else {\\r\\n value += '00'; // Disable + not accept SMS\\r\\n}\\r\\nif (params.SpeedDialButtonSettings.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.SpeedDialButtonSettings.Number) {\\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.SpeedDialButtonSettings.Number;\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.SpeedDialButtonSettings.Name) {\\r\\n var nameContact = params.SpeedDialButtonSettings.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Speed').toUpperCase();\\r\\n }\\r\\n //nameHex = fillHex(nameLenght / 2, nameHex); // fill with '00' to be odd\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694532262},{"Type":1,"NewValue":"{\"Id\":3284,\"Name\":\"Speed Dial Number\",\"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 Rio and watch\\r\\nif (params.SpeedDialButtonSettings.EnableDisableSpeedDial == 'true') {\\r\\n value += '10'; // Enable + Not accept SMS\\r\\n} else {\\r\\n value += '00'; // Disable + not accept SMS\\r\\n}\\r\\nif (params.SpeedDialButtonSettings.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.SpeedDialButtonSettings.Number) {\\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.SpeedDialButtonSettings.Number;\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.SpeedDialButtonSettings.Name) {\\r\\n var nameContact = params.SpeedDialButtonSettings.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Speed').toUpperCase();\\r\\n }\\r\\n //nameHex = fillHex(nameLenght / 2, nameHex); // fill with '00' to be odd\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695909094},{"Type":1,"NewValue":"{\"Id\":3284,\"Name\":\"Speed Dial Number\",\"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 Rio and watch\\r\\nif (params.SpeedDialButtonSettings.EnableDisableSpeedDial == 'true') {\\r\\n value += '10'; // Enable + Not accept SMS\\r\\n} else {\\r\\n value += '00'; // Disable + not accept SMS\\r\\n}\\r\\nif (params.SpeedDialButtonSettings.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.SpeedDialButtonSettings.Number) {\\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.SpeedDialButtonSettings.Number;\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.SpeedDialButtonSettings.Name) {\\r\\n var nameContact = params.SpeedDialButtonSettings.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Speed').toUpperCase();\\r\\n }\\r\\n //nameHex = fillHex(nameLenght / 2, nameHex); // fill with '00' to be odd\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695936022},{"Type":1,"NewValue":"{\"Id\":3284,\"Name\":\"Speed Dial Number\",\"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 Rio and watch\\r\\nif (params.SpeedDialButtonSettings.EnableDisableSpeedDial == 'true') {\\r\\n value += '10'; // Enable + Not accept SMS\\r\\n} else {\\r\\n value += '00'; // Disable + not accept SMS\\r\\n}\\r\\nif (params.SpeedDialButtonSettings.Call == 'true') {\\r\\n value += '1'; // Togle Call\\r\\n} else {\\r\\n value += '0';\\r\\n} // Untogle Call\\r\\nif (params.SpeedDialButtonSettings.Number) {\\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.SpeedDialButtonSettings.Number;\\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\\n// select version\\r\\nswitch (params.DeviceVersion.DeviceVersion) {\\r\\n case '1':\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n case '2':\\r\\n var key = '34';\\r\\n var numberLength = ('00' + decimalToHex(number.length)).slice(-2).toUpperCase();\\r\\n if (params.SpeedDialButtonSettings.Name) {\\r\\n var nameContact = params.SpeedDialButtonSettings.Name;\\r\\n var nameHex = ascii_to_hexa(nameContact).toUpperCase();\\r\\n } else {\\r\\n var nameHex = ascii_to_hexa('Speed').toUpperCase();\\r\\n }\\r\\n //nameHex = fillHex(nameLenght / 2, nameHex); // fill with '00' to be odd\\r\\n var keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\\r\\n var messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\\r\\n var totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n default:\\r\\n var keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n var key = '30';\\r\\n var messageBody = command + keyLength + key + value + numberHex;\\r\\n var totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\\r\\n totalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\\r\\n break;\\r\\n}\\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\":[]}","Timestamp":1696443499}],"Tags":[]},{"Id":3498,"Name":"Heart Rate Detecting Interval","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';\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\nif (params.DeviceVersion.DeviceVersion == '1') {\n command = '02';\n keyLength = '02';\n key = '11';\n heartBeat = '05';\n totalLenght = '0400';\n}\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":25,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":3498,\"Name\":\"Heart Rate Detecting Interval\",\"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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '05';\\n totalLenght = '0400';\\n}\\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\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507189},{"Type":1,"NewValue":"{\"Id\":3498,\"Name\":\"Heart Rate Detecting Interval\",\"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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '05';\\n totalLenght = '0400';\\n}\\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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692140},{"Type":1,"NewValue":"{\"Id\":3498,\"Name\":\"Heart Rate Detecting Interval\",\"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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '10';\\n totalLenght = '0400';\\n}\\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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694765236},{"Type":1,"NewValue":"{\"Id\":3498,\"Name\":\"Heart Rate Detecting Interval\",\"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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '10';\\n totalLenght = '0400';\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695908488},{"Type":1,"NewValue":"{\"Id\":3498,\"Name\":\"Heart Rate Detecting Interval\",\"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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '10';\\n totalLenght = '0400';\\n}\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695937689},{"Type":1,"NewValue":"{\"Id\":3498,\"Name\":\"Heart Rate Detecting Interval\",\"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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '10';\\n totalLenght = '0400';\\n}\\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\":[]}","Timestamp":1695938172},{"Type":1,"NewValue":"{\"Id\":3498,\"Name\":\"Heart Rate Detecting Interval\",\"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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '0A';\\n totalLenght = '0400';\\n}\\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\":[]}","Timestamp":1707985360},{"Type":1,"NewValue":"{\"Id\":3498,\"Name\":\"Heart Rate Detecting Interval\",\"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 = [];\\n//default\\nvar heartBeat = '58 02 00 00'\\nif (params.HeartRateMonitor.HeartRateDetectingInterval) {\\n 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 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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '0A';\\n totalLenght = '0400';\\n}\\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\":[]}","Timestamp":1707986571},{"Type":1,"NewValue":"{\"Id\":3498,\"Name\":\"Heart Rate Detecting Interval\",\"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 msg = [];\\nvar configs = [];\\nvar configsSMS = [];\\n// local test\\n//var params = {HeartRateMonitor:{'HeartRateDetectingInterval':'','EnableDisableHeartRateMonitor':'false'}, DeviceVersion:{'DeviceVersion':2}}\\n//default\\nvar heartBeat = '58020000';\\nif (params.HeartRateMonitor.HeartRateDetectingInterval) {\\n 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 heartBeat = '58020000';\\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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '0A';\\n totalLenght = '0400';\\n}\\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\":[]}","Timestamp":1707987345}],"Tags":[]},{"Id":3499,"Name":"Step Collect Settings","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 totalLenght = '0700';\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\nif (params.DeviceVersion.DeviceVersion == '1') {\n command = '02';\n keyLength = '02';\n key = '11';\n heartBeat = '05';\n totalLenght = '0400';\n}\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":25,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '05';\\n totalLenght = '0400';\\n}\\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\":25,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507472},{"Type":1,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '05';\\n totalLenght = '0400';\\n}\\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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694692405},{"Type":1,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '10';\\n totalLenght = '0400';\\n}\\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\":35,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694765286},{"Type":1,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '10';\\n totalLenght = '0400';\\n}\\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\":3,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695909108},{"Type":1,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '10';\\n totalLenght = '0400';\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695909133},{"Type":1,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '10';\\n totalLenght = '0400';\\n}\\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\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695909154},{"Type":1,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '10';\\n totalLenght = '0400';\\n}\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1695937625},{"Type":1,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '10';\\n totalLenght = '0400';\\n}\\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\":[]}","Timestamp":1695938206},{"Type":1,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '0A';\\n totalLenght = '0400';\\n}\\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\":[]}","Timestamp":1707985331},{"Type":1,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 = [];\\n// default value\\nvar heartBeat = '58 02 00 00';\\nif (params.StepCounting.StepCountingInterval) {\\n 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 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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '0A';\\n totalLenght = '0400';\\n}\\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\":[]}","Timestamp":1707986618},{"Type":1,"NewValue":"{\"Id\":3499,\"Name\":\"Step Collect Settings\",\"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 msg = [];\\nvar configs = [];\\nvar configsSMS = [];\\n// default value\\nvar heartBeat = '58020000';\\nif (params.StepCounting.StepCountingInterval) {\\n 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 heartBeat = '58020000';\\n} // disable and 600 seconds\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\nvar command = '02';\\nvar keyLength = '05';\\nvar key = '5B';\\nvar totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '0A';\\n totalLenght = '0400';\\n}\\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\":[]}","Timestamp":1707987941}],"Tags":[]},{"Id":3805,"Name":"Set WiFi Connect","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 msg = [];\r\nvar configs = [];\r\n//var 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.WiFiConnect.EnableDisableWiFiConnect == 'true') {\r\n if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase();\r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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":6,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":3805,\"Name\":\"Set WiFi Connect\",\"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 msg = [];\\r\\nvar configs = [];\\r\\n//var 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.WiFiConnect.EnableDisableWiFiConnect == 'true') {\\r\\n if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase();\\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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\":6,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706037441},{"Type":1,"NewValue":"{\"Id\":3805,\"Name\":\"Set WiFi Connect\",\"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 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.WiFiConnect.EnableDisableWiFiConnect == 'true') {\\r\\n if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase();\\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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\":6,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706344820}],"Tags":[]},{"Id":3960,"Name":"Set Watch Settings","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 Watch Settings' Only enable y disable:\r\n// params.StepCounting.EnableDisableStepCounting == 'true'\r\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\r\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\r\n// Test enabled both\r\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\r\n// test step on HRT off\r\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test step off HRT on\r\n// 02 11 36 00 00 12 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test both off \r\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) \r\nvar messageBody = '0211360000';\r\n// Watch setting related to Step and heart rate settings\r\nvar dataSMS = '';\r\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1A00003E00000014000000000000';\r\n /* if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0A00003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1200003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0200003800000014000000000000';\r\n} else {\r\n messageBody += '0200003800000014000000000000';\r\n}\r\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\r\nif (params.DeviceVersion.DeviceVersion == '1') {\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n heartBeat = '0A';\r\n totalLenght = '0400';\r\n messageBody = command + keyLength + key + heartBeat;\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":4,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":3960,\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 00 12 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) \\r\\nvar messageBody = '0211360000';\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707985821},{"Type":1,"NewValue":"{\"Id\":3960,\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 1200003A00000014000000000000\\r\\n// test both off \\r\\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) \\r\\nvar messageBody = '0211360000';\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003A00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1708002138},{"Type":1,"NewValue":"{\"Id\":3960,\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) \\r\\nvar messageBody = '0211360008'; // step count/heart value display\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003A00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1708011331},{"Type":1,"NewValue":"{\"Id\":3960,\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) \\r\\nvar messageBody = '021136'; // step count/heart value display\\r\\n// Watch setting related FACE ID\\r\\nif (params.HeartRateMonitor.HeartRateWatchFace == 'true') {\\r\\n messageBody += '0108'; // Face ID 1 \\r\\n} else if (params.StepCounting.StepCountingWatchFace == 'true') {\\r\\n messageBody += '0208'; // Face ID 2\\r\\n} else {\\r\\n messageBody += '0008';\\r\\n} // Default Face ID 0\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003A00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709752193},{"Type":1,"NewValue":"{\"Id\":3960,\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) , lenght and key\\r\\nvar messageBody = '021136';\\r\\n// step count/heart value display\\r\\n// Watch setting related FACE ID\\r\\nswitch (params.HeartRateMonitor.WatchFace) {\\r\\n case x:\\r\\n // code block\\r\\n break;\\r\\n case y:\\r\\n // code block\\r\\n break;\\r\\n default:\\r\\n // code block\\r\\n}\\r\\nif (params.HeartRateMonitor.HeartRateWatchFace == 'true') {\\r\\n messageBody += '0108'; // Face ID 1 \\r\\n} else if (params.StepCounting.StepCountingWatchFace == 'true') {\\r\\n messageBody += '0208'; // Face ID 2\\r\\n} else {\\r\\n messageBody += '0008';\\r\\n} // Default Face ID 0\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003A00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709835912},{"Type":1,"NewValue":"{\"Id\":3960,\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) , lenght and key\\r\\nvar messageBody = '021136';\\r\\n// step count/heart value display\\r\\n// Watch setting related FACE ID\\r\\nif (params.WatchFace.SetWatchFace) {\\r\\n messageBody += params.WatchFace.SetWatchFace; // Face ID \\r\\n} else {\\r\\n messageBody += '00'; // Analog Face Default FACE ID 0 \\r\\n}\\r\\n/*\\r\\nif (params.HeartRateMonitor.HeartRateWatchFace == 'true') {\\r\\n messageBody += '0108'; // Face ID 1 \\r\\n} else if (params.StepCounting.StepCountingWatchFace == 'true') {\\r\\n messageBody += '0208'; // Face ID 2\\r\\n} else {\\r\\n messageBody += '0008';\\r\\n} // Default Face ID 0\\r\\n*/\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '1200003A00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709837334},{"Type":1,"NewValue":"{\"Id\":3960,\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) , lenght and key\\r\\nvar messageBody = '021136';\\r\\n// step count/heart value display\\r\\n// Watch setting related FACE ID\\r\\nif (params.WatchFace.SetWatchFace) {\\r\\n messageBody += params.WatchFace.SetWatchFace; // Face ID \\r\\n} else {\\r\\n messageBody += '00'; // Analog Face Default FACE ID 0 \\r\\n}\\r\\n/*\\r\\nif (params.HeartRateMonitor.HeartRateWatchFace == 'true') {\\r\\n messageBody += '0108'; // Face ID 1 \\r\\n} else if (params.StepCounting.StepCountingWatchFace == 'true') {\\r\\n messageBody += '0208'; // Face ID 2\\r\\n} else {\\r\\n messageBody += '0008';\\r\\n} // Default Face ID 0\\r\\n*/\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '081A00003E00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '080A00003C00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '081200003A00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '080200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '080200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709838700},{"Type":1,"NewValue":"{\"Id\":3960,\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) , lenght and key\\r\\nvar messageBody = '021136';\\r\\n// step count/heart value display\\r\\n// Watch setting related FACE ID\\r\\nif (params.WatchFace.SetWatchFace) {\\r\\n messageBody += params.WatchFace.SetWatchFace; // Face ID \\r\\n} else {\\r\\n messageBody += '00'; // Analog Face Default FACE ID 0 \\r\\n}\\r\\n// Watch Display setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '081A0000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '080A0000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '08120000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '08020000';\\r\\n} else {\\r\\n messageBody += '08020000';\\r\\n}\\r\\n//menu items\\r\\nif ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '06000000'; //menu 1 and 2\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '04000000'; //menu 2\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '02000000'; //menu 1\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '00000000'; // no menu\\r\\n} else {\\r\\n messageBody += '00000000'; // no menu\\r\\n}\\r\\n// from autohome page to the end\\r\\nmessageBody += '14000000000000';\\r\\n/* OLD Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '081A00003E00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '080A00003C00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '081200003A00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '080200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '080200003800000014000000000000';\\r\\n} */\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710174590}],"Tags":[]},{"Id":3963,"Name":"Control Configuration Mode","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`;\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":0,"NewValue":"{\"Id\":3963,\"Name\":\"Control Configuration Mode\",\"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`;\\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":1708015260}],"Tags":[]},{"Id":5009,"Name":"TriggerOTA","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// Trigger OTA\r\nvar 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 value for URL\r\nvar value = 'http://35.180.127.121:5800/fi_ota';\r\nvar value = ascii_to_hexa(value).toUpperCase();\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\n// control command\r\nvar command = '04';\r\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\r\nvar key = '30';\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLenght = changeEndianness(totalLenght);\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":[{"Type":0,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\nvar value = 'http://35.180.127.121:5800/fi_ota';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1717658804},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\nvar value = 'http://portal.airtrace.io:1880/fi_ota';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1717944509},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota';\\r\\nvar value = 'http://portal.airtrace.io:1880/fi_ota/download/l8a_1g_gmo_V04b.8601.2312.B4411.1694569439_V04b.8601.2313.B4411.1702355317_package.zip';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1718181373},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota';\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota/download/l8a_1g_gmo_V04b.8601.2312.B4411.1694569439_V04b.8601.2313.B4411.1702355317_package.zip';\\r\\nvar value = 'http://portal.airtrace.io:1880/fi_ota/download/file';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1718263988},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\nvar value = 'http://portal.airtrace.io:1880/fi_ota';\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota/download/l8a_1g_gmo_V04b.8601.2312.B4411.1694569439_V04b.8601.2313.B4411.1702355317_package.zip';\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota/download/file';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1718267063},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota';\\r\\nvar value = 'http://portal.airtrace.io:1880/fi_ota/download/l8a_1g_gmo_V04b.8601.2312.B4411.1694569439_V04b.8601.2313.B4411.1702355317_package.zip';\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota/download/file';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1718307242},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota';\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota/download/l8a_1g_gmo_V04b.8601.2312.B4411.1694569439_V04b.8601.2313.B4411.1702355317_package.zip';\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota/download/file';\\r\\nvar value = 'https://test.myoysta.com/iOTA/V04.1.0.15.4411.2403.zip';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1718608642},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota';\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota/download/l8a_1g_gmo_V04b.8601.2312.B4411.1694569439_V04b.8601.2313.B4411.1702355317_package.zip';\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota/download/file';\\r\\nvar value = 'https://test.myoysta.com/iOTA/l8a_1g_gmo_V04b.8601.2312.B4411.1694569439_V04b.8601.2313.B4411.1702355317_package.zip';\\r\\n//var value = 'https://test.myoysta.com/iOTA/V04.1.0.15.4411.2403.zip';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1718636161},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota';\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota/download/l8a_1g_gmo_V04b.8601.2312.B4411.1694569439_V04b.8601.2313.B4411.1702355317_package.zip';\\r\\n//var value = 'http://portal.airtrace.io:1880/fi_ota/download/file';\\r\\n//var value = 'https://test.myoysta.com/iOTA/l8a_1g_gmo_V04b.8601.2312.B4411.1694569439_V04b.8601.2313.B4411.1702355317_package.zip';\\r\\n//var value = 'https://test.myoysta.com/iOTA/V04.1.0.15.4411.2403.zip';\\r\\nvar value = 'https://test.myoysta.com/iOTA/fi_ota/l8a_1g_gmo_V04b.8601.2312.B4411.1694569439_V04b.8601.2313.B4411.1702355317_package.zip';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1718812460},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\nvar value = 'http://portal.airtrace.io:1880/fi_ota';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1719421864},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL 40.91.195.192:8098\\r\\nvar value = 'http://40.91.195.192:8098/fi_ota';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1722507053},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL 40.91.195.192:8098\\r\\nvar value = 'http://40.91.195.192:8098/api/fi_ota';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1722591687},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL 40.91.195.192:8098\\r\\n// http://fota.loctube.com:10007/fi_ota (Eview server)\\r\\n// http://40.91.195.192:8098/api/fi_ota (our server)\\r\\nvar value = 'http://fota.loctube.com:10007/fi_ota';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1724928711},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL 40.91.195.192:8098\\r\\n// http://fota.loctube.com:10007/fi_ota (Eview server)\\r\\n// http://40.91.195.192:8098/api/fi_ota (our server)\\r\\nvar value = 'http://40.91.195.192:8098/api/fi_ota';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1725362551},{"Type":1,"NewValue":"{\"Id\":5009,\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL 40.91.195.192:8098\\r\\n// http://fota.loctube.com:10007/fi_ota (Eview server)\\r\\n// http://40.91.195.192:8098/api/fi_ota (test server)\\r\\n// production server 'http://13.81.174.129:8098/api/fi_ota';\\r\\nif (params.Server.SetServer === '52.232.85.255,5678') {\\r\\n var value = 'http://13.81.174.129:8098/api/fi_ota'; // production OTA server\\r\\n} else {\\r\\n var value = 'http://40.91.195.192:8098/api/fi_ota'; // test OTA server\\r\\n}\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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\":[]}","Timestamp":1736338588}],"Tags":[]},{"Id":5810,"Name":"getCustomId","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// getCustomId\r\n// ConvertDevice.CurrentProfile\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 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\n//var 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\n//AddValueSMS('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":[{"Type":0,"NewValue":"{\"Id\":5810,\"Name\":\"getCustomId\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// getCustomId\\r\\n// ConvertDevice.CurrentProfile\\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 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\\n//var 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\\n//AddValueSMS('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\":[]}","Timestamp":1753800680}],"Tags":[]},{"Id":5811,"Name":"setCustomId","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// setCustomId\r\n// ConvertDevice.Profile\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 configs = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar key = '47';\r\nif (params.ConvertDevice.Profile == 'Rio') {\r\n var keyLength = '02';\r\n var customID = '04';\r\n var totalLenght = '0400';\r\n} else if (params.ConvertDevice.Profile == 'Roam') {\r\n var keyLength = '02';\r\n var customID = '64';\r\n var totalLenght = '0400';\r\n} else {\r\n var keyLength = '01';\r\n var customID = '';\r\n var totalLenght = '0300';\r\n}\r\nvar messageBody = command + keyLength + key + customID;\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' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\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":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":5811,\"Name\":\"setCustomId\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// setCustomId\\r\\n// ConvertDevice.Profile\\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 configs = [];\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar key = '47';\\r\\nif (params.ConvertDevice.Profile == 'Rio') {\\r\\n var keyLength = '02';\\r\\n var customID = '04';\\r\\n var totalLenght = '0400';\\r\\n} else if (params.ConvertDevice.Profile == 'Roam') {\\r\\n var keyLength = '02';\\r\\n var customID = '64';\\r\\n var totalLenght = '0400';\\r\\n} else {\\r\\n var keyLength = '01';\\r\\n var customID = '';\\r\\n var totalLenght = '0300';\\r\\n}\\r\\nvar messageBody = command + keyLength + key + customID;\\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' + totalLenght + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\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\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1753801032},{"Type":1,"NewValue":"{\"Id\":5811,\"Name\":\"setCustomId\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// setCustomId\\r\\n// ConvertDevice.Profile\\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 configs = [];\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar key = '47';\\r\\nif (params.ConvertDevice.Profile == '04') { //Rio\\r\\n var keyLength = '02';\\r\\n var customID = '04';\\r\\n var totalLenght = '0400';\\r\\n} else if (params.ConvertDevice.Profile == '64') { // Roam\\r\\n var keyLength = '02';\\r\\n var customID = '64';\\r\\n var totalLenght = '0400';\\r\\n} else {\\r\\n var keyLength = '01';\\r\\n var customID = '';\\r\\n var totalLenght = '0300';\\r\\n}\\r\\nvar messageBody = command + keyLength + key + customID;\\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' + totalLenght + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\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\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1753801712}],"Tags":[]}],"Operations":[{"Id":215,"Name":"Eview","Operation":"if (typeof localTesting === \"undefined\") {\r\n var localTesting = \"False\";\r\n}\r\nconst 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\nvar codeValues = [];\r\nAddValue(codeValues, 'protocol_template', 'Rio');\r\nAddValue(codeValues, 'product', serverParams.ProductName);\r\nvar configsToAck = [];\r\nif (globalTemplate == \"True\") {\r\n if (raw.startsWith('esendex')) {\r\n //general SMS message\r\n }\r\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\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 var message = rawFromBytes;\r\n var properties = message.substring(2, 4);\r\n //need to decrypt properties\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 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 //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 // 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 if (serverParams.Imei === undefined) {\r\n sendMessageToLocalhostNoWait(\"RIO-ASSOCIATE;\" + imei + \";\" + serverParams.Guid + \";\");\r\n }\r\n break;\r\n //Alarm code\r\n case '02':\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 //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 var alarm = 'Geo1';\r\n } else if ((alarmCodeInt & 32) == 32) {\r\n var alarm = 'Geo2';\r\n } else if ((alarmCodeInt & 64) == 64) {\r\n var alarm = 'Geo3';\r\n } else if ((alarmCodeInt & 128) == 128) {\r\n var alarm = 'Geo4';\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 var customID = hex_to_ascii(value);\r\n general += 'customID:' + customID + ',';\r\n break;\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 (alarmCode) {\r\n messageForReceiver = (`Eview-${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 = (`Eview-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};GENERAL=${general}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n }\r\n //else {\r\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \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) {\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 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 var cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\r\n var 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 = (`Eview-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 //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. Seems a pedometer, do I need it?\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 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 }\r\n //var alarmCode = 'True';\r\n var alarm = 'HRT';\r\n general += ' heart rate:' + heartRate + ',';\r\n //messageForReceiver = (`Eview-${alarm};${imei};GENERAL=${general};${info};HRT=${info}`);\r\n //sendMessageToLocalhostNoWait(messageForReceiver);\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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\r\n // \"Eview-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 = (`Eview-${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 = (`Eview-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};GENERAL=${general}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n } else if (alarm === 'HRT') {\r\n messageForReceiver = (`Eview-${alarm};${imei};GENERAL=${general};${info};HRT=${info}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n } else {\r\n messageForReceiver = (`Eview-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};GENERAL=${general}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n }\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 var fwVersion = hex_to_ascii(value);\r\n messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n //IMEI\r\n case '03':\r\n var imei = hexToDecimal(value);\r\n sendMessageToLocalhostNoWait(\"RIO-ASSOCIATE;\" + imei + \";\" + serverParams.Guid + \";\");\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 //GSM Module\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 }\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 switch (key) {\r\n case '01': // Device ID\r\n var imei = hex_to_ascii(value);\r\n sendMessageToLocalhostNoWait(\"RIO-ASSOCIATE;\" + imei + \";\" + serverParams.Guid + \";\");\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 var cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\r\n // debug(cellNetworkSignal)\r\n var 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 workMode += 'workMode:' + workMode + ';';\r\n }\r\n }\r\n }\r\n // revisar\r\n var gen_location = '0';\r\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\r\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\r\n // Todo ... respond to device\r\n //messageForReceiver = `Eview;${imei};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 if (alarmCode) {\r\n messageForReceiver = (`Eview-${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 = (`Eview-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};GENERAL=${general}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n } else {\r\n messageForReceiver = (`Eview-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};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 = (`Eview-ACK;${imei};${rawFromBytes}`); // ${sequenceID}; add ${sequenceID}; 19-07\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n var value = message.substring(index, index = index + keyLength - 2);\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} else if (oystaTemplate == 'True') { // Oysta Template \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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\r\n if (params.data.startsWith('Device location request')) {\r\n configsToAck.push(configIds.RequestLocation.RequestLocation);\r\n } else if (params.data.startsWith('Set IP ok')) {\r\n configsToAck.push(configIds.Server.SetServer);\r\n } else if (params.data.startsWith('Set APN ok')) {\r\n configsToAck.push(configIds.SetAPN.SetAPN);\r\n } else if (params.data.startsWith('Set Rio-')) {\r\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\r\n } else if (params.data.startsWith('loc')) {\r\n configsToAck.push(configIds.RequestLocation.RequestLocation);\r\n } else if (params.data.startsWith('Now:')) {\r\n configsToAck.push(configIds.RequestLocation.RequestLocation);\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\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 back to receiver via console.log\r\nif (configsToAck.length > 0) {\r\n var dataToReceiver = {\r\n 'values': codeValues,\r\n 'configsToAck': configsToAck,\r\n };\r\n} else {\r\n var dataToReceiver = {\r\n 'values': codeValues\r\n };\r\n}\r\nconsole.log(dataToReceiver);\r\n// end of main operation\r\n// define functions used in operation\r\nfunction 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\nfunction 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\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 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\nfunction hex2bin(hex) { //\r\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\r\n}\r\n\r\nfunction 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\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 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\nfunction decimalToHex(x) { // decimal to hex\r\n x = x.toString(16).toUpperCase();\r\n return x;\r\n}\r\n\r\nfunction 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\nfunction 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\nfunction hexToDecimal(x) {\r\n x = parseInt(x, 16);\r\n return x;\r\n}\r\n\r\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\r\n var server;\r\n if (localTesting === \"True\") {\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}","Type":0,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\n var localTesting = \\\"False\\\";\\n}\\nconst 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];\\nvar codeValues = [];\\nAddValue(codeValues, 'protocol_template', 'Rio');\\nAddValue(codeValues, 'product', serverParams.ProductName);\\nvar configsToAck = [];\\nif (globalTemplate == \\\"True\\\") {\\n if (raw.startsWith('esendex')) {\\n //general SMS message\\n }\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\n var properties = message.substring(2, 4);\\n //need to decrypt properties\\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 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 // 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 = hex_to_ascii(value);\\n if (serverParams.Imei === undefined) {\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n }\\n break;\\n //Alarm code\\n case '02':\\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 //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 var alarm = 'Geo1';\\n } else if ((alarmCodeInt & 32) == 32) {\\n var alarm = 'Geo2';\\n } else if ((alarmCodeInt & 64) == 64) {\\n var alarm = 'Geo3';\\n } else if ((alarmCodeInt & 128) == 128) {\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\n general += 'customID:' + customID + ',';\\n break;\\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 = hex_to_ascii(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 (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n status_data = statusDevice; //to oysta template\\n statusHex = (statusHex);\\n statusHex = hex2bin(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 = (`Eview-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 = hex_to_ascii(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 = hex_to_ascii(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 //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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info}`);\\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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel}`);\\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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\n // \\\"Eview-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 if (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 if (alarm === 'HRT') {\\n messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (alarm === 'STP') {\\n messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`Eview-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 }\\n if (command == '02') {\\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 var fwVersion = hex_to_ascii(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //IMEI\\n case '03':\\n var imei = hexToDecimal(value);\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 //GSM Module\\n case '1B':\\n //Decimal o ascii?\\n var gsmModule = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\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 switch (key) {\\n case '01': // Device ID\\n var imei = hex_to_ascii(value);\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n break;\\n case '10': // Heartbeat\\n var heartbeat = hex_to_ascii(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 = hex2bin(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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\n // Todo ... respond to device\\n //messageForReceiver = `Eview;${imei};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 = hex_to_ascii(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 if (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-ACK;${imei};${rawFromBytes}`); // ${sequenceID}; add ${sequenceID}; 19-07\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var value = message.substring(index, index = index + keyLength - 2);\\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 = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\n AddValue(codeValues, \\\"imei\\\", imei);\\n }\\n }\\n} else if (oystaTemplate == 'True') { // Oysta Template \\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\n if (params.data.startsWith('Device location request')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Server.SetServer);\\n } else if (params.data.startsWith('Set APN ok')) {\\n configsToAck.push(configIds.SetAPN.SetAPN);\\n } else if (params.data.startsWith('Set Rio-')) {\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\n } else if (params.data.startsWith('loc')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\n } else if (params.data.startsWith('reboot ok')) {\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\n } else if (params.data.startsWith('Now:')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\nif (configsToAck.length > 0) {\\n var dataToReceiver = {\\n 'values': codeValues,\\n 'configsToAck': configsToAck,\\n };\\n} else {\\n var dataToReceiver = {\\n 'values': codeValues\\n };\\n}\\nconsole.log(dataToReceiver);\\n// end of main operation\\n// define functions used in operation\\nfunction 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\\nfunction ascii_to_hexa(str) { // ascii to hex \\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 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 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}\\n\\nfunction hex2bin(hex) { //\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\n}\\n\\nfunction calculateCheckSum(payloadData) { // check if payload checksum is valid\\n var checksum = byteStringToByteArray(payloadData);\\n checksum = crc16byte(checksum);\\n checksum = decimalToHex(checksum);\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\n return changeEndianness(checksum);\\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 debug(str) { // write debug info to console log, if localTesting\\n if (localTesting === \\\"True\\\") {\\n console.log(str);\\n }\\n}\\n\\nfunction decimalToHex(x) { // decimal to hex\\n x = x.toString(16).toUpperCase();\\n return x;\\n}\\n\\nfunction hex_to_ascii(str1) { // Hex to Ascii \\n var hex = str1.toString();\\n var str = '';\\n for (var n = 0; n < hex.length; n += 2) {\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\n }\\n return str;\\n}\\n\\nfunction hexToDecimalSigned(hex) { // hex to decimal\\n if (hex.length % 2 != 0) {\\n hex = \\\"0\\\" + hex;\\n }\\n var num = parseInt(hex, 16);\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\n if (num > maxVal / 2 - 1) {\\n num = num - maxVal;\\n }\\n return num;\\n}\\n\\nfunction hexToDecimal(x) {\\n x = parseInt(x, 16);\\n return x;\\n}\\n\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n if (localTesting === \\\"True\\\") {\\n console.log('local testing - sending to acceptance server the message ... ');\\n console.log(str);\\n server = '52.174.17.77';\\n } else {\\n server = '127.0.0.1';\\n }\\n var c = net.createConnection(5678, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5678, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1694412468},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 // 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 if (serverParams.Imei === undefined) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\r\\n break;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 //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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info}`);\\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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel}`);\\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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 if (alarm === 'HRT') {\\r\\n messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 }\\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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\r\\n // Todo ... respond to device\\r\\n //messageForReceiver = `Eview;${imei};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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-ACK;${imei};${rawFromBytes}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\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} else if (oystaTemplate == 'True') { // Oysta Template \\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1694508502},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 // 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 if (serverParams.Imei === undefined) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\r\\n break;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 //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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info}`);\\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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel}`);\\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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 if (alarm === 'HRT') {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 }\\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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\r\\n // Todo ... respond to device\\r\\n //messageForReceiver = `Eview;${imei};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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-ACK;${imei};${rawFromBytes}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\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} else if (oystaTemplate == 'True') { // Oysta Template \\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1694533336},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 // 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 if (serverParams.Imei === undefined) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\r\\n break;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 //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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info}`);\\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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel}`);\\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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 if (alarm === 'HRT') {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\r\\n // Todo ... respond to device\\r\\n //messageForReceiver = `Eview;${imei};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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-ACK;${imei};${rawFromBytes}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\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} else if (oystaTemplate == 'True') { // Oysta Template \\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1694599053},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 // 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 //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 // 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 if (serverParams.Imei === undefined) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\r\\n break;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 //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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info}`);\\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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel}`);\\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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 if (alarm === 'HRT') {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\r\\n // Todo ... respond to device\\r\\n //messageForReceiver = `Eview;${imei};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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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 } // if multiACK\\r\\n } // For multiACK\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template \\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1695751192},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 // 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\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 // 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 if (serverParams.Imei === undefined) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\r\\n break;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 //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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info}`);\\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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel}`);\\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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 if (alarm === 'HRT') {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\r\\n // Todo ... respond to device\\r\\n //messageForReceiver = `Eview;${imei};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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1696354222},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\r\\n break;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 //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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info}`);\\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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel}`);\\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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 if (alarm === 'HRT') {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\r\\n // Todo ... respond to device\\r\\n //messageForReceiver = `Eview;${imei};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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1696370464},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\r\\n break;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info}`);\\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 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 // Eview-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>\\r\\n // messageForReceiver = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel}`);\\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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 if (alarm === 'HRT') {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\r\\n // Todo ... respond to device\\r\\n //messageForReceiver = `Eview;${imei};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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1696787161},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\r\\n break;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\r\\n // Todo ... respond to device\\r\\n //messageForReceiver = `Eview;${imei};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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1696862342},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\r\\n break;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1706346502},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\r\\n break;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 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(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1708082493},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value != '30 36') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 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(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1713258924},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '30 36') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 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(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1713259440},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE-1;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '30 36') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE-2;\\\" + 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 //GSM Module\\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 }\\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 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(\\\"RIO-ASSOCIATE-3;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716198405},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '30 36') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n return; // REMOVE\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716199005},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '30 36') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n return;\\r\\n }\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716200101},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' && value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n return;\\r\\n }\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716203803},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n return;\\r\\n }\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716204442},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716204852},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716211427},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";-1\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";-2\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";-3\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716211770},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";-1\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";-2\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";-3\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716212316},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";-1\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";-2\\\");\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n AddValue(codeValues, \\\"customID--\\\", value);\\r\\n if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";-3\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716213190},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 var fwVersion = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n AddValue(codeValues, \\\"customID--\\\", value);\\r\\n if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716219144},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n AddValue(codeValues, \\\"customID--\\\", value);\\r\\n if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1718361570},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nif (configsToAck.length > 0) {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues,\\r\\n 'configsToAck': configsToAck,\\r\\n };\\r\\n} else {\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n}\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n AddValue(codeValues, \\\"customID--\\\", value);\\r\\n if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1718362324},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.Current Firmware Version, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n AddValue(codeValues, \\\"customID--\\\", value);\\r\\n if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1718364470},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n AddValue(codeValues, \\\"customID--\\\", value);\\r\\n if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1718562258},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = '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, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n AddValue(codeValues, \\\"customID--\\\", value);\\r\\n if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1718818383},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n AddValue(codeValues, \\\"customID--\\\", value);\\r\\n if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"RIO-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1718819021},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n AddValue(codeValues, \\\"customID--\\\", value);\\r\\n if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1724070635},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1724242228},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05' || value == '12') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1733497295},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05' || value == '12' || value == '06') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1733502018},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05' || value == '12' || value == '06' || value == '07') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1733860473},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 if (value == '04' || value == '05' || value == '12' || value == '06' || value == '07' || value == '64') {\\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 var customID = hex_to_ascii(value);\\r\\n general += 'customID:' + customID + ',';\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742057726},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nvar dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 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 //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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742496032},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742499686},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1744114071},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1744114164},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n //if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1744114758},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n //if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1744114903},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n //if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1744278293},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n //if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1744367218},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n //if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1749056964},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n //if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1749108515},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // ADD THE OPS CODE HERE\\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', 'Rio');\\n AddValue(codeValues, 'product', serverParams.ProductName);\\n var configsToAck = [];\\n var configsToUpdate = [];\\n var configsToSend = [];\\n if (globalTemplate == \\\"True\\\") {\\n if (raw.startsWith('esendex')) {\\n //general SMS message\\n }\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\n var properties = message.substring(2, 4);\\n //need to decrypt properties\\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 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 if (params.imei) {\\n AddValue(codeValues, 'imei', params.imei);\\n };\\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\n if (params.data.startsWith('Device location request')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Server.SetServer);\\n } else if (params.data.startsWith('IMEI:')) {\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n } else if (params.data.startsWith('Set APN ok')) {\\n configsToAck.push(configIds.SetAPN.SetAPN);\\n } else if (params.data.startsWith('Set Rio-')) {\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\n } else if (params.data.startsWith('loc')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\n } else if (params.data.startsWith('reboot ok')) {\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\n } else if (params.data.startsWith('Now:')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\n /*var 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 console.log(dataToReceiver);*/\\n const dtr = sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n // end of main operation\\n // define functions used in operation\\n function sendDataToReceiver(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 console.log(dataToReceiver);\\n return dataToReceiver;\\n }\\n // modify to return the object that contains your data\\n return dtr;\\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\\n function decoder(str) { // decode rawdata\\n // Rio Decoder\\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 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 = hex_to_ascii(value);\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n break;\\n //Alarm code\\n case '02':\\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 //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 var alarm = 'Geo1';\\n } else if ((alarmCodeInt & 32) == 32) {\\n var alarm = 'Geo2';\\n } else if ((alarmCodeInt & 64) == 64) {\\n var alarm = 'Geo3';\\n } else if ((alarmCodeInt & 128) == 128) {\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n return;\\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 = hex_to_ascii(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 (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n status_data = statusDevice; //to oysta template\\n statusHex = (statusHex);\\n statusHex = hex2bin(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 = (`Eview-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 = hex_to_ascii(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 = hex_to_ascii(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 = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\n //descr = hex_to_ascii(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 = hex_to_ascii(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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\n // \\\"Eview-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 if (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`Eview-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 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 = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n case '1A':\\n //no ACK need\\n var fwVersionL = hex_to_ascii(value);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n //IMEI\\n case '03':\\n var imei = hexToDecimal(value);\\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 //GSM Module\\n case '1B':\\n //Decimal o ascii?\\n var gsmModule = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\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 switch (key) {\\n case '01': // Device ID\\n var imei = hex_to_ascii(value);\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\n // return;\\n //}\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n //AddValue(codeValues, \\\"customID--\\\", value);\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n break;\\n case '10': // Heartbeat\\n var heartbeat = hex_to_ascii(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 = hex2bin(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 // CustomID is not provided so far with command type 03.. commented in the mean time\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 = hex_to_ascii(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 if (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var value = message.substring(index, index = index + keyLength - 2);\\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 = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\n AddValue(codeValues, \\\"imei\\\", imei);\\n }\\n }\\n }\\n\\n function ascii_to_hexa(str) { // ascii to hex \\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\\n function 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\\n function 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 }\\n\\n function hex2bin(hex) { //\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\n }\\n\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\n var checksum = byteStringToByteArray(payloadData);\\n checksum = crc16byte(checksum);\\n checksum = decimalToHex(checksum);\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\n return changeEndianness(checksum);\\n }\\n\\n function 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\\n function debug(str) { // write debug info to console log, if localTesting\\n if (localTesting === \\\"True\\\") {\\n console.log(str);\\n }\\n }\\n\\n function decimalToHex(x) { // decimal to hex\\n x = x.toString(16).toUpperCase();\\n return x;\\n }\\n\\n function hex_to_ascii(str1) { // Hex to Ascii \\n var hex = str1.toString();\\n var str = '';\\n for (var n = 0; n < hex.length; n += 2) {\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\n }\\n return str;\\n }\\n\\n function hexToDecimalSigned(hex) { // hex to decimal\\n if (hex.length % 2 != 0) {\\n hex = \\\"0\\\" + hex;\\n }\\n var num = parseInt(hex, 16);\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\n if (num > maxVal / 2 - 1) {\\n num = num - maxVal;\\n }\\n return num;\\n }\\n\\n function hexToDecimal(x) {\\n x = parseInt(x, 16);\\n return x;\\n }\\n\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server = '127.0.0.1';\\n var port = 5678;\\n if (localTesting === \\\"True\\\") {\\n console.log('local testing - sending to acceptance server the message ... ');\\n console.log(str);\\n server = '52.174.17.77';\\n port = 5878;\\n }\\n var c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = net.createConnection(port, server);\\n });\\n c.write(`${str}`);\\n c.end();\\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":1752512140},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\n let localTesting = \\\"False\\\";\\n}\\nconst 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];\\nvar codeValues = [];\\nAddValue(codeValues, 'protocol_template', 'Rio');\\nAddValue(codeValues, 'product', serverParams.ProductName);\\nvar configsToAck = [];\\nvar configsToUpdate = [];\\nvar configsToSend = [];\\nif (globalTemplate == \\\"True\\\") {\\n if (raw.startsWith('esendex')) {\\n //general SMS message\\n }\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\n var properties = message.substring(2, 4);\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\n if (params.data.startsWith('Device location request')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Server.SetServer);\\n } else if (params.data.startsWith('IMEI:')) {\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n } else if (params.data.startsWith('Set APN ok')) {\\n configsToAck.push(configIds.SetAPN.SetAPN);\\n } else if (params.data.startsWith('Set Rio-')) {\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\n } else if (params.data.startsWith('loc')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\n } else if (params.data.startsWith('reboot ok')) {\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\n } else if (params.data.startsWith('Now:')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\n/*var dataToReceiver = {\\n 'values': codeValues\\n};\\nif (configsToAck.length > 0) {\\n dataToReceiver.configsToAck = configsToAck\\n};\\nif (configsToUpdate.length > 0) {\\n dataToReceiver.configsToUpdate = configsToUpdate\\n};\\nif (configsToSend.length > 0) {\\n dataToReceiver.configsToSend = configsToSend\\n};\\nconsole.log(dataToReceiver);*/\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n// end of main operation\\n// define functions used in operation\\nfunction sendDataToReceiver(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 console.log(dataToReceiver);\\n}\\n\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\n // Rio Decoder\\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 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 = hex_to_ascii(value);\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n break;\\n //Alarm code\\n case '02':\\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 //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 var alarm = 'Geo1';\\n } else if ((alarmCodeInt & 32) == 32) {\\n var alarm = 'Geo2';\\n } else if ((alarmCodeInt & 64) == 64) {\\n var alarm = 'Geo3';\\n } else if ((alarmCodeInt & 128) == 128) {\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n return;\\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 = hex_to_ascii(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 (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n status_data = statusDevice; //to oysta template\\n statusHex = (statusHex);\\n statusHex = hex2bin(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 = (`Eview-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 = hex_to_ascii(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 = hex_to_ascii(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 = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\n //descr = hex_to_ascii(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 = hex_to_ascii(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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\n // \\\"Eview-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 if (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`Eview-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 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 = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n case '1A':\\n //no ACK need\\n var fwVersionL = hex_to_ascii(value);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n //IMEI\\n case '03':\\n var imei = hexToDecimal(value);\\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 //GSM Module\\n case '1B':\\n //Decimal o ascii?\\n var gsmModule = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\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 switch (key) {\\n case '01': // Device ID\\n var imei = hex_to_ascii(value);\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\n // return;\\n //}\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n //AddValue(codeValues, \\\"customID--\\\", value);\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n break;\\n case '10': // Heartbeat\\n var heartbeat = hex_to_ascii(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 = hex2bin(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 // CustomID is not provided so far with command type 03.. commented in the mean time\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 = hex_to_ascii(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 if (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var value = message.substring(index, index = index + keyLength - 2);\\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 = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\n AddValue(codeValues, \\\"imei\\\", imei);\\n }\\n }\\n}\\n\\nfunction ascii_to_hexa(str) { // ascii to hex \\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 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 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}\\n\\nfunction hex2bin(hex) { //\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\n}\\n\\nfunction calculateCheckSum(payloadData) { // check if payload checksum is valid\\n var checksum = byteStringToByteArray(payloadData);\\n checksum = crc16byte(checksum);\\n checksum = decimalToHex(checksum);\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\n return changeEndianness(checksum);\\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 debug(str) { // write debug info to console log, if localTesting\\n //if (localTesting === \\\"True\\\") {\\n // console.log(str);\\n // }\\n}\\n\\nfunction decimalToHex(x) { // decimal to hex\\n x = x.toString(16).toUpperCase();\\n return x;\\n}\\n\\nfunction hex_to_ascii(str1) { // Hex to Ascii \\n var hex = str1.toString();\\n var str = '';\\n for (var n = 0; n < hex.length; n += 2) {\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\n }\\n return str;\\n}\\n\\nfunction hexToDecimalSigned(hex) { // hex to decimal\\n if (hex.length % 2 != 0) {\\n hex = \\\"0\\\" + hex;\\n }\\n var num = parseInt(hex, 16);\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\n if (num > maxVal / 2 - 1) {\\n num = num - maxVal;\\n }\\n return num;\\n}\\n\\nfunction hexToDecimal(x) {\\n x = parseInt(x, 16);\\n return x;\\n}\\n\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n //if (localTesting === \\\"True\\\") {\\n // console.log('local testing - sending to acceptance server the message ... ');\\n // console.log(str);\\n // server = '52.174.17.77';\\n //} else {\\n server = '127.0.0.1';\\n //}\\n var c = net.createConnection(5678, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5678, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1752512256},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\n let localTesting = \\\"False\\\";\\n}\\nconst 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];\\nvar codeValues = [];\\nAddValue(codeValues, 'protocol_template', 'Rio');\\nAddValue(codeValues, 'product', serverParams.ProductName);\\nvar configsToAck = [];\\nvar configsToUpdate = [];\\nvar configsToSend = [];\\nif (globalTemplate == \\\"True\\\") {\\n if (raw.startsWith('esendex')) {\\n //general SMS message\\n }\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\n var properties = message.substring(2, 4);\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\n if (params.data.startsWith('Device location request')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Server.SetServer);\\n } else if (params.data.startsWith('IMEI:')) {\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n } else if (params.data.startsWith('Set APN ok')) {\\n configsToAck.push(configIds.SetAPN.SetAPN);\\n } else if (params.data.startsWith('Set Rio-')) {\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\n } else if (params.data.startsWith('loc')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\n } else if (params.data.startsWith('reboot ok')) {\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\n } else if (params.data.startsWith('Now:')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\n/*var dataToReceiver = {\\n 'values': codeValues\\n};\\nif (configsToAck.length > 0) {\\n dataToReceiver.configsToAck = configsToAck\\n};\\nif (configsToUpdate.length > 0) {\\n dataToReceiver.configsToUpdate = configsToUpdate\\n};\\nif (configsToSend.length > 0) {\\n dataToReceiver.configsToSend = configsToSend\\n};\\nconsole.log(dataToReceiver);*/\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n// end of main operation\\n// define functions used in operation\\nfunction sendDataToReceiver(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 console.log(dataToReceiver);\\n}\\n\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\n // Rio Decoder\\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 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 = hex_to_ascii(value);\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n break;\\n //Alarm code\\n case '02':\\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 //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 var alarm = 'Geo1';\\n } else if ((alarmCodeInt & 32) == 32) {\\n var alarm = 'Geo2';\\n } else if ((alarmCodeInt & 64) == 64) {\\n var alarm = 'Geo3';\\n } else if ((alarmCodeInt & 128) == 128) {\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n return;\\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 = hex_to_ascii(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 (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\n // messageForReceiver = (`Eview-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 alarm = alarmCode = general = status_data = '';\\n //= 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; //comprobar si quitar o poner 21/04 \\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) {\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n status_data = statusDevice; //to oysta template\\n statusHex = (statusHex);\\n statusHex = hex2bin(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 = (`Eview-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 = hex_to_ascii(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 = hex_to_ascii(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 = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\n //descr = hex_to_ascii(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 = hex_to_ascii(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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\n // \\\"Eview-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 if (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`Eview-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 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 = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n case '1A':\\n //no ACK need\\n var fwVersionL = hex_to_ascii(value);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n //IMEI\\n case '03':\\n var imei = hexToDecimal(value);\\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 //GSM Module\\n case '1B':\\n //Decimal o ascii?\\n var gsmModule = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\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 switch (key) {\\n case '01': // Device ID\\n var imei = hex_to_ascii(value);\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\n // return;\\n //}\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n //AddValue(codeValues, \\\"customID--\\\", value);\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n break;\\n case '10': // Heartbeat\\n var heartbeat = hex_to_ascii(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 = hex2bin(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 // CustomID is not provided so far with command type 03.. commented in the mean time\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 = hex_to_ascii(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 if (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var value = message.substring(index, index = index + keyLength - 2);\\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 = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\n AddValue(codeValues, \\\"imei\\\", imei);\\n }\\n }\\n}\\n\\nfunction ascii_to_hexa(str) { // ascii to hex \\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 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 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}\\n\\nfunction hex2bin(hex) { //\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\n}\\n\\nfunction calculateCheckSum(payloadData) { // check if payload checksum is valid\\n var checksum = byteStringToByteArray(payloadData);\\n checksum = crc16byte(checksum);\\n checksum = decimalToHex(checksum);\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\n return changeEndianness(checksum);\\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 debug(str) { // write debug info to console log, if localTesting\\n //if (localTesting === \\\"True\\\") {\\n // console.log(str);\\n // }\\n}\\n\\nfunction decimalToHex(x) { // decimal to hex\\n x = x.toString(16).toUpperCase();\\n return x;\\n}\\n\\nfunction hex_to_ascii(str1) { // Hex to Ascii \\n var hex = str1.toString();\\n var str = '';\\n for (var n = 0; n < hex.length; n += 2) {\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\n }\\n return str;\\n}\\n\\nfunction hexToDecimalSigned(hex) { // hex to decimal\\n if (hex.length % 2 != 0) {\\n hex = \\\"0\\\" + hex;\\n }\\n var num = parseInt(hex, 16);\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\n if (num > maxVal / 2 - 1) {\\n num = num - maxVal;\\n }\\n return num;\\n}\\n\\nfunction hexToDecimal(x) {\\n x = parseInt(x, 16);\\n return x;\\n}\\n\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n //if (localTesting === \\\"True\\\") {\\n // console.log('local testing - sending to acceptance server the message ... ');\\n // console.log(str);\\n // server = '52.174.17.77';\\n //} else {\\n server = '127.0.0.1';\\n //}\\n var c = net.createConnection(5678, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5678, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1754556277},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\n let localTesting = \\\"False\\\";\\n}\\nconst 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];\\nvar codeValues = [];\\nAddValue(codeValues, 'protocol_template', 'Rio');\\nAddValue(codeValues, 'product', serverParams.ProductName);\\nvar configsToAck = [];\\nvar configsToUpdate = [];\\nvar configsToSend = [];\\nif (globalTemplate == \\\"True\\\") {\\n if (raw.startsWith('esendex')) {\\n //general SMS message\\n }\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\n var properties = message.substring(2, 4);\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\n if (params.data.startsWith('Device location request')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Server.SetServer);\\n } else if (params.data.startsWith('IMEI:')) {\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n } else if (params.data.startsWith('Set APN ok')) {\\n configsToAck.push(configIds.SetAPN.SetAPN);\\n } else if (params.data.startsWith('Set Rio-')) {\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\n } else if (params.data.startsWith('loc')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\n } else if (params.data.startsWith('reboot ok')) {\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\n } else if (params.data.startsWith('Now:')) {\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\n/*var dataToReceiver = {\\n 'values': codeValues\\n};\\nif (configsToAck.length > 0) {\\n dataToReceiver.configsToAck = configsToAck\\n};\\nif (configsToUpdate.length > 0) {\\n dataToReceiver.configsToUpdate = configsToUpdate\\n};\\nif (configsToSend.length > 0) {\\n dataToReceiver.configsToSend = configsToSend\\n};\\nconsole.log(dataToReceiver);*/\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n// end of main operation\\n// define functions used in operation\\nfunction sendDataToReceiver(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 console.log(dataToReceiver);\\n}\\n\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\n // Rio Decoder\\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 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 = hex_to_ascii(value);\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n break;\\n //Alarm code\\n case '02':\\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 //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 var alarm = 'Geo1';\\n } else if ((alarmCodeInt & 32) == 32) {\\n var alarm = 'Geo2';\\n } else if ((alarmCodeInt & 64) == 64) {\\n var alarm = 'Geo3';\\n } else if ((alarmCodeInt & 128) == 128) {\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n return;\\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 = hex_to_ascii(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 (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\n // messageForReceiver = (`Eview-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 //alarm = alarmCode = general = status_data = '';\\n //= 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; //comprobar si quitar o poner 21/04 \\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) {\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n status_data = statusDevice; //to oysta template\\n statusHex = (statusHex);\\n statusHex = hex2bin(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 = (`Eview-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 = hex_to_ascii(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 = hex_to_ascii(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 = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\n //descr = hex_to_ascii(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 = hex_to_ascii(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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\n // \\\"Eview-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 if (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`Eview-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 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 = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n case '1A':\\n //no ACK need\\n var fwVersionL = hex_to_ascii(value);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n //IMEI\\n case '03':\\n var imei = hexToDecimal(value);\\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 //GSM Module\\n case '1B':\\n //Decimal o ascii?\\n var gsmModule = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\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 switch (key) {\\n case '01': // Device ID\\n var imei = hex_to_ascii(value);\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\n // return;\\n //}\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n //AddValue(codeValues, \\\"customID--\\\", value);\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n break;\\n case '10': // Heartbeat\\n var heartbeat = hex_to_ascii(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 = hex2bin(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 // CustomID is not provided so far with command type 03.. commented in the mean time\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 = hex_to_ascii(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 if (alarmCode) {\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var value = message.substring(index, index = index + keyLength - 2);\\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 = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\n AddValue(codeValues, \\\"imei\\\", imei);\\n }\\n }\\n}\\n\\nfunction ascii_to_hexa(str) { // ascii to hex \\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 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 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}\\n\\nfunction hex2bin(hex) { //\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\n}\\n\\nfunction calculateCheckSum(payloadData) { // check if payload checksum is valid\\n var checksum = byteStringToByteArray(payloadData);\\n checksum = crc16byte(checksum);\\n checksum = decimalToHex(checksum);\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\n return changeEndianness(checksum);\\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 debug(str) { // write debug info to console log, if localTesting\\n //if (localTesting === \\\"True\\\") {\\n // console.log(str);\\n // }\\n}\\n\\nfunction decimalToHex(x) { // decimal to hex\\n x = x.toString(16).toUpperCase();\\n return x;\\n}\\n\\nfunction hex_to_ascii(str1) { // Hex to Ascii \\n var hex = str1.toString();\\n var str = '';\\n for (var n = 0; n < hex.length; n += 2) {\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\n }\\n return str;\\n}\\n\\nfunction hexToDecimalSigned(hex) { // hex to decimal\\n if (hex.length % 2 != 0) {\\n hex = \\\"0\\\" + hex;\\n }\\n var num = parseInt(hex, 16);\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\n if (num > maxVal / 2 - 1) {\\n num = num - maxVal;\\n }\\n return num;\\n}\\n\\nfunction hexToDecimal(x) {\\n x = parseInt(x, 16);\\n return x;\\n}\\n\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n //if (localTesting === \\\"True\\\") {\\n // console.log('local testing - sending to acceptance server the message ... ');\\n // console.log(str);\\n // server = '52.174.17.77';\\n //} else {\\n server = '127.0.0.1';\\n //}\\n var c = net.createConnection(5678, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5678, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1754579334},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template \\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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// --- utils ---\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1756659844},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template \\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\r\\n var index = 18;\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\r\\n // need to check if checksum is correct for possible msg corruption \\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting === \\\"True\\\") {\\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// --- utils ---\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1756660884},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.7\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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 //alarm = alarmCode = general = status_data = '';\\r\\n //= 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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n //if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1756665913},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.8\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"false\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template \\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\r\\n var index = 18;\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\r\\n // need to check if checksum is correct for possible msg corruption \\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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// --- utils ---\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1756666536},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.8\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = false;\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template \\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\r\\n var index = 18;\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\r\\n // need to check if checksum is correct for possible msg corruption \\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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// --- utils ---\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1756666787},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.7\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = false;\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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 //alarm = alarmCode = general = status_data = '';\\r\\n //= 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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.debug('local testing - sending to acceptance server the message ... ');\\r\\n console.debug(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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1756667194},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.8\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = false;\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template \\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\r\\n var index = 18;\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\r\\n // need to check if checksum is correct for possible msg corruption \\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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// --- utils ---\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1756667740},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.7\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n //need to decrypt properties\\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 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 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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\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 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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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 //alarm = alarmCode = general = status_data = '';\\r\\n //= 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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n //if (localTesting === \\\"True\\\") {\\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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1756668617},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.8\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = false;\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template\\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\r\\n var index = 18;\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\r\\n // need to check if checksum is correct for possible msg corruption \\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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// --- utils ---\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1756716942},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.8\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = false;\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template\\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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\r\\n var index = 18;\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\r\\n // need to check if checksum is correct for possible msg corruption \\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //comprobar si quitar o poner 21/04 \\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 if (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 = (`Eview-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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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// --- utils ---\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1756742711},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.8.1\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = false;\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template\\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 (params.location_time) {\\r\\n AddValue(codeValues, 'location_time', params.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 (params.location_time) {\\r\\n AddValue(codeValues, 'location_time', params.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 (params.location_time) {\\r\\n AddValue(codeValues, 'location_time', params.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 (params.location_time) {\\r\\n AddValue(codeValues, 'location_time', params.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] ?? \\\"undefined\\\";\\r\\n var batLevel = gen_location[1] ?? \\\"undefined\\\";\\r\\n var mac2 = gen_location[2] ?? \\\"undefined\\\";\\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 (params.location_time) {\\r\\n AddValue(codeValues, 'location_time', params.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 if (messageTypeLocalCode == 'COMM-SMS') { // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\n/*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n};\\r\\nif (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n};\\r\\nif (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n};\\r\\nif (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n};\\r\\nconsole.log(dataToReceiver);*/\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// define functions used in operation\\r\\nfunction 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\\nfunction 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\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\r\\n var index = 18;\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\r\\n // need to check if checksum is correct for possible msg corruption \\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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; //first it is initializated equal to status, but if alarm or other event, it is changed.\\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 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 = (`Eview-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 //}\\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\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 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\\nfunction decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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// --- utils ---\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1757012186},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.8.2\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = false;\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template\\r\\n // first decoding data of Oysta templates\\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 }\\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 }\\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 }\\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 }\\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] ?? \\\"undefined\\\";\\r\\n var batLevel = gen_location[1] ?? \\\"undefined\\\";\\r\\n var mac2 = gen_location[2] ?? \\\"undefined\\\";\\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 }\\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 // Add time values\\r\\n if (params.location_time) {\\r\\n AddValue(codeValues, 'location_time', params.location_time);\\r\\n }\\r\\n if (params.event_time) {\\r\\n AddValue(codeValues, 'event_time', params.event_time);\\r\\n }\\r\\n // SMS message sent in\\r\\n if (messageTypeLocalCode == 'COMM-SMS') {\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// decoder global template function\\r\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\r\\n var index = 18;\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\r\\n // need to check if checksum is correct for possible msg corruption \\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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 = '';\\r\\n //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 // if timestamp is older than 1 year, update it (AGPS bug)\\r\\n if (timestamp < moment.utc().subtract(1, \\\"year\\\").unix()) {\\r\\n timestamp = moment.utc().unix();\\r\\n }\\r\\n location_time = timestamp;\\r\\n event_time = timestamp; //first it is initializated equal to status, but if alarm or other event, it is changed.\\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 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 = (`Eview-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 //}\\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// define functions used in operation\\r\\nfunction 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\\nfunction 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// --- utils ---\\r\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\\r\\n// test Utils\\r\\nfunction 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\\nfunction 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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1757092625},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.8.3\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = false;\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template\\r\\n // first decoding data of Oysta templates\\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 }\\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 }\\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 }\\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 }\\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] ?? \\\"undefined\\\";\\r\\n var batLevel = gen_location[1] ?? \\\"undefined\\\";\\r\\n var mac2 = gen_location[2] ?? \\\"undefined\\\";\\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 }\\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 // Add time values\\r\\n if (params.location_time) {\\r\\n AddValue(codeValues, 'location_time', params.location_time);\\r\\n }\\r\\n if (params.event_time) {\\r\\n AddValue(codeValues, 'event_time', params.event_time);\\r\\n }\\r\\n // SMS message sent in\\r\\n if (messageTypeLocalCode == 'COMM-SMS') {\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// decoder global template function\\r\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\r\\n var index = 18;\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\r\\n // need to check if checksum is correct for possible msg corruption \\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 // if timestamp is older than 1 year, update it (AGPS bug)\\r\\n if (timestamp < moment.utc().subtract(1, \\\"year\\\").unix()) {\\r\\n timestamp += 619315200; //moment.utc().unix();\\r\\n }\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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 = '';\\r\\n //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 // if timestamp is older than 1 year, update it (AGPS bug)\\r\\n if (timestamp < moment.utc().subtract(1, \\\"year\\\").unix()) {\\r\\n timestamp += 619315200; //moment.utc().unix();\\r\\n }\\r\\n location_time = timestamp;\\r\\n event_time = timestamp; //first it is initializated equal to status, but if alarm or other event, it is changed.\\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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, quizas meter dentro del if (alarmcode)\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 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 = (`Eview-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 //}\\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// define functions used in operation\\r\\nfunction 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\\nfunction 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// --- utils ---\\r\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\\r\\n// test Utils\\r\\nfunction 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\\nfunction 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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1757345176},{"Type":1,"NewValue":"{\"Id\":215,\"Name\":\"Eview\",\"Operation\":\"// version 3.8.3\\r\\nif (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = false;\\r\\n}\\r\\nconst 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\\nvar codeValues = [];\\r\\nAddValue(codeValues, 'protocol_template', 'Rio');\\r\\nAddValue(codeValues, 'product', serverParams.ProductName);\\r\\nvar configsToAck = [];\\r\\nvar configsToUpdate = [];\\r\\nvar configsToSend = [];\\r\\nif (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n //general SMS message\\r\\n }\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\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 var message = rawFromBytes;\\r\\n var messageForReceiver;\\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 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 debug(message);\\r\\n //debug(splitFramesFromHexStream(message));\\r\\n decodeHexStream(message);\\r\\n //decodeHexStream(message);\\r\\n // Loop to decode multi-ACK msg\\r\\n /*\\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 */\\r\\n} else if (oystaTemplate == 'True') { // Oysta Template\\r\\n // first decoding data of Oysta templates\\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 }\\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 }\\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 }\\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 }\\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] || \\\"undefined\\\";\\r\\n var batLevel = gen_location[1] || \\\"undefined\\\";\\r\\n var mac2 = gen_location[2] || \\\"undefined\\\";\\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 }\\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 // Add time values\\r\\n if (params.location_time) {\\r\\n AddValue(codeValues, 'location_time', params.location_time);\\r\\n }\\r\\n if (params.event_time) {\\r\\n AddValue(codeValues, 'event_time', params.event_time);\\r\\n }\\r\\n // SMS message sent in\\r\\n if (messageTypeLocalCode == 'COMM-SMS') {\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Server.SetServer);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n } else if (params.data.startsWith('Set APN ok')) {\\r\\n configsToAck.push(configIds.SetAPN.SetAPN);\\r\\n } else if (params.data.startsWith('Set Rio-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('loc')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.DeviceReboot.DeviceReboot);\\r\\n } else if (params.data.startsWith('Now:')) {\\r\\n configsToAck.push(configIds.RequestLocation.RequestLocation);\\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 = (`Rio-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 = (`Rio-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 } else if (messageTypeLocalCode == '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 = (`Rio-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 }\\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 back to receiver via console.log\\r\\nsendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n// end of main operation\\r\\n// decoder global template function\\r\\nfunction decoder(str) { // decode rawdata\\r\\n // Rio Decoder\\r\\n var message = str;\\r\\n //need to decrypt properties\\r\\n var index = 18;\\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 sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\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 } else needsAck = false;\\r\\n // need to check if checksum is correct for possible msg corruption \\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 if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return;\\r\\n }\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\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 // if timestamp is older than 1 year, update it (AGPS bug)\\r\\n if (timestamp < moment.utc().subtract(1, \\\"year\\\").unix()) {\\r\\n timestamp += 619315200; //moment.utc().unix();\\r\\n }\\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 //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 var alarm = 'Geo1';\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n var alarm = 'Geo2';\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n var alarm = 'Geo3';\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n var alarm = 'Geo4';\\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 AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return;\\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 (alarmCode) {\\r\\n messageForReceiver = (`Eview-${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 = (`Eview-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 {\\r\\n // messageForReceiver = (`Eview-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 = '';\\r\\n //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 // if timestamp is older than 1 year, update it (AGPS bug)\\r\\n if (timestamp < moment.utc().subtract(1, \\\"year\\\").unix()) {\\r\\n timestamp += 619315200; //moment.utc().unix();\\r\\n }\\r\\n location_time = timestamp;\\r\\n event_time = timestamp; //first it is initializated equal to status, but if alarm or other event, it is changed.\\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) {\\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 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 = (`Eview-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 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 = (`Eview-${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 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 = (`Eview-${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 // Eview-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"Eview-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 = (`Eview-${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 = (`Eview-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 = (`Eview-${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 = (`Eview-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Eview-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, quizas meter dentro del if (alarmcode)\\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 = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersion, fwVersion);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersion);\\r\\n // configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersionL = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersionL\\\", fwVersionL);\\r\\n messageForReceiver = (`Eview;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.Controls.CurrentFirmwareVersionLong, fwVersionL);\\r\\n // AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.Controls.CurrentFirmwareVersionLong);\\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 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 //GSM Module\\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 }\\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 switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n //if (imei === '861629050509748' || imei === '861629050507536') {\\r\\n // return;\\r\\n //}\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //AddValue(codeValues, \\\"customID--\\\", value);\\r\\n //if (customID == '05' || 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 (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n //return\\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 // CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n //if (customID == '05' || 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 gen_location = '0';\\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 keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n messageBody = messageBody + keyLengthHex + key + decimalToHex(timestamp);\\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 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 = (`Eview-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 //}\\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// define functions used in operation\\r\\nfunction 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\\nfunction 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// --- utils ---\\r\\nfunction 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\\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 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\\nfunction hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n}\\r\\n\\r\\nfunction 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\\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 decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction 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\\nfunction 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\\nfunction hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n}\\r\\n\\r\\nfunction hexToBytes(hex) {\\r\\n return Uint8Array.from(hex.replace(/[^0-9a-f]/gi, \\\"\\\").match(/.{1,2}/g).map(b => parseInt(b, 16)));\\r\\n}\\r\\n\\r\\nfunction bytesToHex(bytes) {\\r\\n return Array.from(bytes, b => b.toString(16).padStart(2, \\\"0\\\").toUpperCase()).join(\\\"\\\");\\r\\n}\\r\\n// --- Multimsg splitter ---\\r\\nfunction splitFramesFromHexStream(hex) {\\r\\n const buf = hexToBytes(hex);\\r\\n const frames = [];\\r\\n const errors = [];\\r\\n let i = 0;\\r\\n while (i < buf.length) {\\r\\n // Search header 0xAB\\r\\n while (i < buf.length && buf[i] !== 0xAB) i++;\\r\\n if (i >= buf.length) break;\\r\\n const start = i;\\r\\n // necesitamos al menos cabecera mínima: H(1)+Prop(1)+Len(2)+CRC(2)+Seq(2)=8\\r\\n if (buf.length - i < 8) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: \\\"Quedan menos de 8 bytes para cabecera\\\"\\r\\n });\\r\\n break; // incompleto al final del stream\\r\\n }\\r\\n const props = buf[i + 1];\\r\\n const len = buf[i + 2] | (buf[i + 3] << 8); // Length LE (solo body)\\r\\n const total = 1 + 1 + 2 + 2 + 2 + len;\\r\\n if (len > 1024) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Length fuera de rango (${len})`\\r\\n });\\r\\n i++; // re-sync: avanzar 1 y seguir buscando siguiente 0xAB\\r\\n continue;\\r\\n }\\r\\n if (buf.length - i < total) {\\r\\n errors.push({\\r\\n offset: i,\\r\\n reason: `Frame incompleto: requiere ${total} bytes`\\r\\n });\\r\\n break; // final del stream sin completar\\r\\n }\\r\\n const frameBytes = buf.slice(i, i + total);\\r\\n frames.push(bytesToHex(frameBytes));\\r\\n i += total; // saltar al siguiente posible frame\\r\\n }\\r\\n return {\\r\\n frames,\\r\\n errors\\r\\n };\\r\\n}\\r\\n// --- Decodificador de stream (N frames concatenados) ---\\r\\nfunction decodeHexStream(hex) {\\r\\n const {\\r\\n frames,\\r\\n errors\\r\\n } = splitFramesFromHexStream(hex);\\r\\n const decoded = frames.map(h => {\\r\\n try {\\r\\n return {\\r\\n ok: true,\\r\\n ...decoder(h)\\r\\n };\\r\\n } catch (e) {\\r\\n return {\\r\\n ok: false,\\r\\n error: e.message,\\r\\n rawHex: h\\r\\n };\\r\\n }\\r\\n });\\r\\n return {\\r\\n decoded,\\r\\n splitErrors: errors\\r\\n };\\r\\n}\\r\\n// test Utils\\r\\nfunction 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\\nfunction 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}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1757507054}]},{"Id":231,"Name":"OnUpdateProtocol_EView","Operation":"let 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":[{"Type":0,"NewValue":"{\"Id\":231,\"Name\":\"OnUpdateProtocol_EView\",\"Operation\":\"let 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\":[]}","Timestamp":1696071788},{"Type":1,"NewValue":"{\"Id\":231,\"Name\":\"OnUpdateProtocol_EView\",\"Operation\":\"let configsToUpdate = [];\\r\\nif (configs.WiFiConnect.EnableDisableWiFiConnect === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.WiFiConnect.EnableDisableWiFiConnect,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\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\":[]}","Timestamp":1707127809},{"Type":1,"NewValue":"{\"Id\":231,\"Name\":\"OnUpdateProtocol_EView\",\"Operation\":\"let configsToUpdate = [];\\r\\nif (configs.Controls.ConfigurationMode === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.Controls.ConfigurationMode,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\r\\nif (configs.WiFiConnect.EnableDisableWiFiConnect === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.WiFiConnect.EnableDisableWiFiConnect,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\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\":[]}","Timestamp":1708276363},{"Type":1,"NewValue":"{\"Id\":231,\"Name\":\"OnUpdateProtocol_EView\",\"Operation\":\"let configsToUpdate = [];\\r\\nif (configs.HeartRateMonitor.HeartRateWatchFace === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.HeartRateMonitor.HeartRateWatchFace,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\r\\nif (configs.StepCounting.StepCountingWatchFace === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.StepCounting.StepCountingWatchFace,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\r\\nif (configs.Controls.ConfigurationMode === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.Controls.ConfigurationMode,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\r\\nif (configs.WiFiConnect.EnableDisableWiFiConnect === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.WiFiConnect.EnableDisableWiFiConnect,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\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\":[]}","Timestamp":1709751672},{"Type":1,"NewValue":"{\"Id\":231,\"Name\":\"OnUpdateProtocol_EView\",\"Operation\":\"let configsToUpdate = [];\\r\\nif (configs.WatchFace.SetWatchFace === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.WatchFace.SetWatchFace,\\r\\n 'value': '00'\\r\\n });\\r\\n}\\r\\nif (configs.WatchFace.HeartRateWatchFace === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.WatchFace.HeartRateWatchFace,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\r\\nif (configs.WatchFace.StepCountingWatchFace === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.WatchFace.StepCountingWatchFace,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\r\\nif (configs.Controls.ConfigurationMode === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.Controls.ConfigurationMode,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\r\\nif (configs.WiFiConnect.EnableDisableWiFiConnect === \\\"\\\") {\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.WiFiConnect.EnableDisableWiFiConnect,\\r\\n 'value': 'false'\\r\\n });\\r\\n}\\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\":[]}","Timestamp":1709837697}]}],"Groups":[{"Id":5010,"Parent":null,"Name":"Admin Settings","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5011,"Parent":null,"Name":"Feature Settings","Json":"{ \"description\": null, \"columns\": 1, \"order\": 1, \"listSize\": 1, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5012,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"SMS Prefix","Json":"{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5012,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"SMS Prefix\",\"Json\":\"{\\\"description\\\":\\\"SMS Prefix\\\",\\\"columns\\\":1,\\\"order\\\":7,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508098},{"Type":1,"NewValue":"{\"Id\":5012,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"SMS Prefix\",\"Json\":\"{\\\"description\\\":\\\"SMS Prefix\\\",\\\"columns\\\":1,\\\"order\\\":9,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182533}]},{"Id":5013,"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Alarm Clock","Json":"{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5014,"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"SOS Button Settings","Json":"{\"description\":\"SOS Button Settings\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5015,"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Alerts","Json":"{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5016,"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Find Device","Json":"{\"description\":\"Find Device\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5017,"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Device Settings","Json":"{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5018,"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"White List","Json":"{\"description\":null,\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5019,"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Speed Dial Button Settings","Json":"{\"description\":\"Speed Dial / Set Contact 2\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5020,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"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\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5020,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"No Activity\",\"Json\":\"{\\\"description\\\":\\\"No Activity\\\",\\\"columns\\\":1,\\\"order\\\":4,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1694508086},{"Type":1,"NewValue":"{\"Id\":5020,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"No Activity\",\"Json\":\"{\\\"description\\\":\\\"No Activity\\\",\\\"columns\\\":1,\\\"order\\\":6,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182518}]},{"Id":5021,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Voice Prompt","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\":5021,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Voice Prompt\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":5,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1694508090},{"Type":1,"NewValue":"{\"Id\":5021,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Voice Prompt\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":7,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182523}]},{"Id":5022,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Update Firmware","Json":"{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5022,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Update Firmware\",\"Json\":\"{\\\"description\\\":\\\"Over the Air update of device firmware\\\",\\\"columns\\\":1,\\\"order\\\":6,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508094},{"Type":1,"NewValue":"{\"Id\":5022,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Update Firmware\",\"Json\":\"{\\\"description\\\":\\\"Over the Air update of device firmware\\\",\\\"columns\\\":1,\\\"order\\\":8,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182528}]},{"Id":5023,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Device Reboot","Json":"{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5023,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Device Reboot\",\"Json\":\"{\\\"description\\\":\\\"Device Reboot\\\",\\\"columns\\\":1,\\\"order\\\":19,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508144},{"Type":1,"NewValue":"{\"Id\":5023,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Device Reboot\",\"Json\":\"{\\\"description\\\":\\\"Device Reboot\\\",\\\"columns\\\":1,\\\"order\\\":20,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1706784485},{"Type":1,"NewValue":"{\"Id\":5023,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":22,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Device Reboot\",\"Json\":\"{\\\"description\\\":\\\"Device Reboot\\\",\\\"columns\\\":1,\\\"order\\\":22,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182588}]},{"Id":5024,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Device Version","Json":"{\"description\":\"Device Version\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5024,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Device Version\",\"Json\":\"{\\\"description\\\":\\\"Device Version\\\",\\\"columns\\\":1,\\\"order\\\":3,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1694508083},{"Type":1,"NewValue":"{\"Id\":5024,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Device Version\",\"Json\":\"{\\\"description\\\":\\\"Device Version\\\",\\\"columns\\\":1,\\\"order\\\":5,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182514}]},{"Id":5025,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Factory Reset","Json":"{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5025,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Factory Reset\",\"Json\":\"{\\\"description\\\":\\\"Factory Reset\\\",\\\"columns\\\":1,\\\"order\\\":18,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508140},{"Type":1,"NewValue":"{\"Id\":5025,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Factory Reset\",\"Json\":\"{\\\"description\\\":\\\"Factory Reset\\\",\\\"columns\\\":1,\\\"order\\\":19,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1706784480},{"Type":1,"NewValue":"{\"Id\":5025,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Factory Reset\",\"Json\":\"{\\\"description\\\":\\\"Factory Reset\\\",\\\"columns\\\":1,\\\"order\\\":21,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182584}]},{"Id":5026,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Working Mode","Json":"{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5026,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Working Mode\",\"Json\":\"{\\\"description\\\":\\\"Different modes for communication\\\",\\\"columns\\\":1,\\\"order\\\":13,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508121},{"Type":1,"NewValue":"{\"Id\":5026,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Working Mode\",\"Json\":\"{\\\"description\\\":\\\"Different modes for communication\\\",\\\"columns\\\":1,\\\"order\\\":14,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1706784457},{"Type":1,"NewValue":"{\"Id\":5026,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Working Mode\",\"Json\":\"{\\\"description\\\":\\\"Different modes for communication\\\",\\\"columns\\\":1,\\\"order\\\":16,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182564}]},{"Id":5027,"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"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\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5028,"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Welfare Check","Json":"{\"description\":\"Welfare Check (Only Rio)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5029,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Enable Control","Json":"{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5029,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Enable Control\",\"Json\":\"{\\\"description\\\":\\\"Enable Control\\\",\\\"columns\\\":1,\\\"order\\\":12,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1694508117},{"Type":1,"NewValue":"{\"Id\":5029,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Enable Control\",\"Json\":\"{\\\"description\\\":\\\"Enable Control\\\",\\\"columns\\\":1,\\\"order\\\":11,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1694508340},{"Type":1,"NewValue":"{\"Id\":5029,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Enable Control\",\"Json\":\"{\\\"description\\\":\\\"Enable Control\\\",\\\"columns\\\":1,\\\"order\\\":12,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1706784449},{"Type":1,"NewValue":"{\"Id\":5029,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Enable Control\",\"Json\":\"{\\\"description\\\":\\\"Enable Control\\\",\\\"columns\\\":1,\\\"order\\\":14,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182555}]},{"Id":5030,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Power Off","Json":"{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5030,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Power Off\",\"Json\":\"{\\\"description\\\":\\\"Power Off\\\",\\\"columns\\\":1,\\\"order\\\":20,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508148},{"Type":1,"NewValue":"{\"Id\":5030,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Power Off\",\"Json\":\"{\\\"description\\\":\\\"Power Off\\\",\\\"columns\\\":1,\\\"order\\\":21,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1706784490},{"Type":1,"NewValue":"{\"Id\":5030,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":23,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":22,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Power Off\",\"Json\":\"{\\\"description\\\":\\\"Power Off\\\",\\\"columns\\\":1,\\\"order\\\":23,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182593}]},{"Id":5031,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set APN","Json":"{\"description\":\"Set APN\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5031,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Set APN\",\"Json\":\"{\\\"description\\\":\\\"Set APN\\\",\\\"columns\\\":1,\\\"order\\\":9,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508107},{"Type":1,"NewValue":"{\"Id\":5031,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Set APN\",\"Json\":\"{\\\"description\\\":\\\"Set APN\\\",\\\"columns\\\":1,\\\"order\\\":11,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182542}]},{"Id":5032,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Request Location","Json":"{\"description\":\"Request Location\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5032,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Request Location\",\"Json\":\"{\\\"description\\\":\\\"Request Location\\\",\\\"columns\\\":1,\\\"order\\\":10,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1694508110},{"Type":1,"NewValue":"{\"Id\":5032,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Request Location\",\"Json\":\"{\\\"description\\\":\\\"Request Location\\\",\\\"columns\\\":1,\\\"order\\\":11,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1706784444},{"Type":1,"NewValue":"{\"Id\":5032,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Request Location\",\"Json\":\"{\\\"description\\\":\\\"Request Location\\\",\\\"columns\\\":1,\\\"order\\\":13,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182551}]},{"Id":5033,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Delete Records","Json":"{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5033,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Delete Records\",\"Json\":\"{\\\"description\\\":\\\"Delete Records\\\",\\\"columns\\\":1,\\\"order\\\":17,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508137},{"Type":1,"NewValue":"{\"Id\":5033,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Delete Records\",\"Json\":\"{\\\"description\\\":\\\"Delete Records\\\",\\\"columns\\\":1,\\\"order\\\":18,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1706784476},{"Type":1,"NewValue":"{\"Id\":5033,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Delete Records\",\"Json\":\"{\\\"description\\\":\\\"Delete Records\\\",\\\"columns\\\":1,\\\"order\\\":20,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182579}]},{"Id":5034,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"SMS Password","Json":"{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5034,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"SMS Password\",\"Json\":\"{\\\"description\\\":\\\"Function not available\\\",\\\"columns\\\":1,\\\"order\\\":11,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508114},{"Type":1,"NewValue":"{\"Id\":5034,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"SMS Password\",\"Json\":\"{\\\"description\\\":\\\"Function not available\\\",\\\"columns\\\":1,\\\"order\\\":12,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508344},{"Type":1,"NewValue":"{\"Id\":5034,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"SMS Password\",\"Json\":\"{\\\"description\\\":\\\"Function not available\\\",\\\"columns\\\":1,\\\"order\\\":13,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1706784453},{"Type":1,"NewValue":"{\"Id\":5034,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"SMS Password\",\"Json\":\"{\\\"description\\\":\\\"Function not available\\\",\\\"columns\\\":1,\\\"order\\\":15,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182560}]},{"Id":5035,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"{\"description\":\"Server\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5035,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Server\",\"Json\":\"{\\\"description\\\":\\\"Server\\\",\\\"columns\\\":1,\\\"order\\\":8,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508103},{"Type":1,"NewValue":"{\"Id\":5035,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Server\",\"Json\":\"{\\\"description\\\":\\\"Server\\\",\\\"columns\\\":1,\\\"order\\\":10,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182538}]},{"Id":5036,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Continuous Locate","Json":"{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5036,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Continuous Locate\",\"Json\":\"{\\\"description\\\":\\\"Continuous Locate if Alert is triggered\\\",\\\"columns\\\":1,\\\"order\\\":15,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1694508129},{"Type":1,"NewValue":"{\"Id\":5036,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Continuous Locate\",\"Json\":\"{\\\"description\\\":\\\"Continuous Locate if Alert is triggered\\\",\\\"columns\\\":1,\\\"order\\\":16,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1706784467},{"Type":1,"NewValue":"{\"Id\":5036,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Continuous Locate\",\"Json\":\"{\\\"description\\\":\\\"Continuous Locate if Alert is triggered\\\",\\\"columns\\\":1,\\\"order\\\":18,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1710182572}]},{"Id":5037,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Cycle Interval","Json":"{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5037,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Cycle Interval\",\"Json\":\"{\\\"description\\\":\\\"Cycle Interval\\\",\\\"columns\\\":1,\\\"order\\\":14,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1694508126},{"Type":1,"NewValue":"{\"Id\":5037,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Cycle Interval\",\"Json\":\"{\\\"description\\\":\\\"Cycle Interval\\\",\\\"columns\\\":1,\\\"order\\\":15,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1706784461},{"Type":1,"NewValue":"{\"Id\":5037,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Cycle Interval\",\"Json\":\"{\\\"description\\\":\\\"Cycle Interval\\\",\\\"columns\\\":1,\\\"order\\\":17,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182568}]},{"Id":5038,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"System Language","Json":"{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5038,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"System Language\",\"Json\":\"{\\\"description\\\":\\\"System Language\\\",\\\"columns\\\":1,\\\"order\\\":16,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1694508133},{"Type":1,"NewValue":"{\"Id\":5038,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"System Language\",\"Json\":\"{\\\"description\\\":\\\"System Language\\\",\\\"columns\\\":1,\\\"order\\\":17,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1706784471},{"Type":1,"NewValue":"{\"Id\":5038,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"System Language\",\"Json\":\"{\\\"description\\\":\\\"System Language\\\",\\\"columns\\\":1,\\\"order\\\":19,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182576}]},{"Id":5039,"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Beacon 10","Json":"{\"description\":\"Set Beacon 10\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5040,"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Alarm Clock 2","Json":"{\"description\":\"Alarm Clock 2\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5041,"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Alarm Clock 3","Json":"{\"description\":\"Alarm Clock 3\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5042,"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Alarm Clock 1","Json":"{\"description\":\"Alarm Clock 1\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5043,"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Beacon 1","Json":"{\"description\":\"Set Beacon 1\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5044,"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Beacon 2","Json":"{\"description\":\"Set Beacon 2\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5045,"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Beacon 3","Json":"{\"description\":\"Set Beacon 3\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5046,"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Beacon 4","Json":"{\"description\":\"Set Beacon 4\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5047,"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Beacon 5","Json":"{\"description\":\"Set Beacon 5\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5048,"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Beacon 7","Json":"{\"description\":\"Set Beacon 7\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5049,"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Beacon 8","Json":"{\"description\":\"Set Beacon 8\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5050,"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Beacon 9","Json":"{\"description\":\"Set Beacon 9\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5051,"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Alarm Clock 4","Json":"{\"description\":\"Alarm Clock 4\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5052,"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Beacon 6","Json":"{\"description\":\"Set Beacon 6\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5053,"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Fall Alarm","Json":"{\"description\":\"Fall Alarm\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5054,"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Movement Alert","Json":"{\"description\":\"Movement Alert\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5055,"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"White List Number 6","Json":"{\"description\":\"White List Number 6\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5056,"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"White List Number 8","Json":"{\"description\":\"White List Number 8\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5057,"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"White List Number 7","Json":"{\"description\":\"White List Number 7\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5058,"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"White List Number 5","Json":"{\"description\":\"White List Number 5\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5059,"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"White List Number 2","Json":"{\"description\":\"White List Number 2\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5060,"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"White List Number 1","Json":"{\"description\":\"White List Number 1\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5061,"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"White List Number 4","Json":"{\"description\":\"White List Number 4\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5062,"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Tilt Alert","Json":"{\"description\":\"Tilt Alert\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5063,"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Voice Prompt Volume","Json":"{\"description\":\"Voice Prompt Volume\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5064,"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Mic Volume","Json":"{\"description\":\"Mic Volume\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5065,"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Ring Tone Volume","Json":"{\"description\":\"Ring Tone Volume\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5066,"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Do Not Disturb","Json":"{\"description\":\"Do Not Disturb\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5067,"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Phone Settings","Json":"{\"description\":\"Phone Settings\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5068,"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"NonMovement Alert","Json":"{\"description\":\"Non-movement Alert\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5069,"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Power Alert","Json":"{\"description\":\"Power Alert\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5070,"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Over Speed Alert","Json":"{\"description\":\"Over Speed Alert\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5071,"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Speaker Volume","Json":"{\"description\":\"Speaker Volume\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5072,"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"White List Number 3","Json":"{\"description\":\"White List Number 3\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5173,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Heart Rate Monitor","Json":"{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5173,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Heart Rate Monitor\",\"Json\":\"{\\\"description\\\":\\\"Heart Rate Monitor (Only Watch)\\\",\\\"columns\\\":1,\\\"order\\\":3,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182472}]},{"Id":5180,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Step Counting","Json":"{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":5180,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Step Counting\",\"Json\":\"{\\\"description\\\":\\\"Step Counting (Only Watch)\\\",\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1694507879},{"Type":1,"NewValue":"{\"Id\":5180,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Step Counting\",\"Json\":\"{\\\"description\\\":\\\"Step Counting (Only Watch)\\\",\\\"columns\\\":1,\\\"order\\\":2,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1694508080},{"Type":1,"NewValue":"{\"Id\":5180,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Step Counting\",\"Json\":\"{\\\"description\\\":\\\"Step Counting (Only Watch)\\\",\\\"columns\\\":1,\\\"order\\\":4,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182509}]},{"Id":5420,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":19,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":20,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5420,"Name":"WiFi Connect","Json":{"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":"WiFi Connect","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":5420,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"WiFi Connect\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1706034970},{"Type":1,"NewValue":"{\"Id\":5420,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"WiFi Connect\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":10,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1706784440},{"Type":1,"NewValue":"{\"Id\":5420,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"WiFi Connect\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":12,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182547}]},{"Id":5522,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5420,"Name":"WiFi Connect","Json":{"description":null,"columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":20,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":19,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":21,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5522,"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":[]}]},"Name":"Controls","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":5522,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"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,\"ProtocolActionObjects\":[]}","Timestamp":1708016932},{"Type":1,"NewValue":"{\"Id\":5522,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":22,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":23,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"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,\"ProtocolActionObjects\":[]}","Timestamp":1718618566}]},{"Id":5605,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5420,"Name":"WiFi Connect","Json":{"description":null,"columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5522,"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":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":20,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":19,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":21,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5605,"Name":"Watch Face","Json":{"description":"Watch Face (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Watch Face","Json":"{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":5605,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Watch Face\",\"Json\":\"{\\\"description\\\":\\\"Watch Face (Only Watch)\\\",\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1709836244},{"Type":1,"NewValue":"{\"Id\":5605,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Watch Face\",\"Json\":\"{\\\"description\\\":\\\"Watch Face (Only Watch)\\\",\\\"columns\\\":1,\\\"order\\\":2,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1710182468}]},{"Id":7436,"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5420,"Name":"WiFi Connect","Json":{"description":null,"columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5605,"Name":"Watch Face","Json":{"description":"Watch Face (Only Watch)","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5522,"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":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":19,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":20,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":21,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":22,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":23,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":7436,"Name":"Convert Device","Json":{"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":"Convert Device","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":7436,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5024,\"Name\":\"Device Version\",\"Json\":{\"description\":\"Device Version\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5522,\"Name\":\"Controls\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5034,\"Name\":\"SMS Password\",\"Json\":{\"description\":\"Function not available\",\"columns\":1,\"order\":15,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5021,\"Name\":\"Voice Prompt\",\"Json\":{\"description\":null,\"columns\":1,\"order\":7,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5012,\"Name\":\"SMS Prefix\",\"Json\":{\"description\":\"SMS Prefix\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5036,\"Name\":\"Continuous Locate\",\"Json\":{\"description\":\"Continuous Locate if Alert is triggered\",\"columns\":1,\"order\":18,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":5033,\"Name\":\"Delete Records\",\"Json\":{\"description\":\"Delete Records\",\"columns\":1,\"order\":20,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5025,\"Name\":\"Factory Reset\",\"Json\":{\"description\":\"Factory Reset\",\"columns\":1,\"order\":21,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5023,\"Name\":\"Device Reboot\",\"Json\":{\"description\":\"Device Reboot\",\"columns\":1,\"order\":22,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5030,\"Name\":\"Power Off\",\"Json\":{\"description\":\"Power Off\",\"columns\":1,\"order\":23,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":7436,\"Name\":\"Convert Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Convert Device\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"LanguageId\":null,\"ProtocolActionObjects\":[]}","Timestamp":1753799991},{"Type":2,"NewValue":"{\"Id\":7436,\"Parent\":{\"Id\":5010,\"Name\":\"Admin Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":7436,\"Name\":\"Convert Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Convert Device\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"LanguageId\":null,\"ProtocolActionObjects\":[]}","Timestamp":1761240154}]}],"GroupParams":[{"Id":8204,"Group":{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"SMS Prefix","Json":"{\"name\":\"SMS Prefix\",\"default\":\"true\",\"description\":\"Prefix\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"DEPRECATED: Only use to disable on devices that already have it enabled. The feature adds the IMEI to the start of any SMS sent back from the Rio.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8145,"Group":{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Call","Json":"{\"name\":\"Call\",\"default\":\"\",\"description\":\"Call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle Call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8151,"Group":{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Ring Time","Json":"{\"name\":\"Ring Time\",\"default\":\"\",\"description\":\"Ring Time\",\"type\":\"number\",\"suffix\":\"seconds\",\"prefix\":null,\"min\":1,\"max\":60,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The time the Rio will ring for before dropping the call.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":5}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8150,"Group":{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Retries","Json":"{\"name\":\"Retries\",\"default\":\"\",\"description\":\"Retries\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":0,\"max\":10,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The number of times the call will be retried if call failes. (0=infinite)\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8149,"Group":{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Number","Json":"{\"name\":\"Number\",\"default\":\"\",\"description\":\"Phone Number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8148,"Group":{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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 SOS Button Settings","Json":"{\"name\":\"Enable Disable SOS Button Settings\",\"default\":\"true\",\"description\":\"Toggle SOS Button Settings\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8147,"Group":{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Feedback","Json":"{\"name\":\"Feedback\",\"default\":\"\",\"description\":\"Feedback\",\"type\":\"radioGroup\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"How the Rio responds when an SOS is triggered.\",\"options\":[{\"value\":\"00\",\"label\":\"No Feedback\"},{\"value\":\"01\",\"label\":\"Vibrate only\"},{\"value\":\"10\",\"label\":\"Voice only\"},{\"value\":\"11\",\"label\":\"Voice and vibration\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8146,"Group":{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Trigger Mode","Json":"{\"name\":\"Trigger Mode\",\"default\":\"\",\"description\":\"Trigger Mode\",\"type\":\"radioGroup\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The method for triggering the SOS\",\"options\":[{\"value\":\"0\",\"label\":\"Long Press\"},{\"value\":\"1\",\"label\":\"Double Press\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"],\"order\":6}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8152,"Group":{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Find Device","Json":"{\"name\":\"Find Device\",\"default\":\"\",\"description\":\"Find Device\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Click this to send a command to the Rio that will help the VIP find their device if lost in the home. The Rio will emit a sound.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8158,"Group":{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Number","Json":"{\"name\":\"Number\",\"default\":\"\",\"description\":\"Phone Number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8157,"Group":{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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 Speed Dial","Json":"{\"name\":\"Enable Disable Speed Dial\",\"default\":\"true\",\"description\":\"Toggle Speed Dial\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Use secondary call button\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8156,"Group":{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Feedback","Json":"{\"name\":\"Feedback\",\"default\":\"\",\"description\":\"Feedback\",\"type\":\"radioGroup\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"How the Rio responds when a call is made using the secondary call button\",\"options\":[{\"value\":\"00\",\"label\":\"No Feedback\"},{\"value\":\"01\",\"label\":\"Vibrate only\"},{\"value\":\"10\",\"label\":\"Voice only\"},{\"value\":\"11\",\"label\":\"Vibrate and Voice\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8155,"Group":{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Trigger Mode","Json":"{\"name\":\"Trigger Mode\",\"default\":\"\",\"description\":\"Trigger mode\",\"type\":\"radioGroup\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[{\"label\":\"Long press\",\"value\":\"0\"},{\"label\":\"Double press\",\"value\":\"1\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8153,"Group":{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Call","Json":"{\"name\":\"Call\",\"default\":\"\",\"description\":\"Call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle Call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":5}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8154,"Group":{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":"Name","Json":"{\"name\":\"Name\",\"default\":\"\",\"description\":\"Contact Name\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":8,\"helpText\":\"Insert Contact Name\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8160,"Group":{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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 No Activity","Json":"{\"name\":\"Enable Disable No Activity\",\"default\":\"\",\"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":"false","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":8160,\"Group\":{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"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\\\":\\\"false\\\",\\\"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":1696371636}],"LanguageId":null,"Tags":[{"Id":1727,"Name":"noActivityActivate","BackendAction":"activateNoActivity","Value":""}]},{"Id":8159,"Group":{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"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\":8159,\"Group\":{\"Id\":5020,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":4,\"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":1696371709}],"LanguageId":null,"Tags":[{"Id":1728,"Name":"noActivityInterval","BackendAction":"noActivityInterval","Value":""}]},{"Id":8129,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Charging","Json":"{\"name\":\"Charging\",\"default\":\"\",\"description\":\" Your alarm is charging\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":20}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8208,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call Disconnected","Json":"{\"name\":\"Call Disconnected\",\"default\":\"\",\"description\":\"Call disconnected!\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":17}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8198,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Base Location","Json":"{\"name\":\"Base Location\",\"default\":\"\",\"description\":\"Charging base location set\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8193,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call Hang","Json":"{\"name\":\"Call Hang\",\"default\":\"\",\"description\":\"Call hang up!\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":19}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8174,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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\":\"Now time %s.\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8165,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"BLE","Json":"{\"name\":\"BLE\",\"default\":\"\",\"description\":\"BLE connected\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":6}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8164,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call 3","Json":"{\"name\":\"Call 3\",\"default\":\"\",\"description\":\"Call 3\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":9}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8163,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Alarm Cancel","Json":"{\"name\":\"Alarm Cancel\",\"default\":\"\",\"description\":\"Alarm cancel\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8162,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Find","Json":"{\"name\":\"Find\",\"default\":\"\",\"description\":\"Find me\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":23}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8161,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call Error","Json":"{\"name\":\"Call Error\",\"default\":\"\",\"description\":\"Call error\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":18}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8142,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call 8","Json":"{\"name\":\"Call 8\",\"default\":\"\",\"description\":\"Call 8\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":14}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8141,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Beep","Json":"{\"name\":\"Beep\",\"default\":\"false\",\"description\":\"Beep\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":5}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8140,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Tilt Cancel","Json":"{\"name\":\"Tilt Cancel\",\"default\":\"true\",\"description\":\"Tilt alarm cancelled!\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8139,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Alarm Complete","Json":"{\"name\":\"Alarm Complete\",\"default\":\"\",\"description\":\"Alarm complete\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8138,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Activity","Json":"{\"name\":\"Activity\",\"default\":\"\",\"description\":\"Activity reminder!\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8137,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Tilt","Json":"{\"name\":\"Tilt\",\"default\":\"\",\"description\":\"Tilt alert\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8136,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Motion","Json":"{\"name\":\"Motion\",\"default\":\"\",\"description\":\"Motion alarm\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":24}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8135,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"No Motion","Json":"{\"name\":\"No Motion\",\"default\":\"\",\"description\":\"No motion alarm\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":25}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8134,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Click","Json":"{\"name\":\"Click\",\"default\":\"\",\"description\":\"Click SOS to stop call sequence!\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":21}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8133,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"SOS","Json":"{\"name\":\"SOS\",\"default\":\"\",\"description\":\"SOS alarm\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":26}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8132,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Fall","Json":"{\"name\":\"Fall\",\"default\":\"\",\"description\":\"Fall down alarm\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":22}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8131,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call 10","Json":"{\"name\":\"Call 10\",\"default\":\"\",\"description\":\"Call 10\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":16}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8130,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call 9","Json":"{\"name\":\"Call 9\",\"default\":\"\",\"description\":\"Call 9\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":15}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8128,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call 7","Json":"{\"name\":\"Call 7\",\"default\":\"\",\"description\":\"Call 7\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":13}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8127,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call 6","Json":"{\"name\":\"Call 6\",\"default\":\"\",\"description\":\"Call 6\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":12}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8126,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call 5","Json":"{\"name\":\"Call 5\",\"default\":\"\",\"description\":\"Call 5\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":11}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8125,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call 4","Json":"{\"name\":\"Call 4\",\"default\":\"\",\"description\":\"Call 4\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":10}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8123,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call 2","Json":"{\"name\":\"Call 2\",\"default\":\"\",\"description\":\"Call 2\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":8}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8122,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Call 1","Json":"{\"name\":\"Call 1\",\"default\":\"\",\"description\":\"Call 1\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":7}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8121,"Group":{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Battery","Json":"{\"name\":\"Battery\",\"default\":\"\",\"description\":\"Battery low\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8199,"Group":{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"OTA Update","Json":"{\"name\":\"OTA Update\",\"default\":\"\",\"description\":\"Performs an OTA update\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Sends command to perform OTA update\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":8199,\"Group\":{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"OTA Update\",\"Json\":\"{\\\"name\\\":\\\"OTA Update\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Performs an OTA update\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Sends command to perform OTA update\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1717658921},{"Type":0,"NewValue":"{\"Id\":8199,\"Group\":{\"Id\":5022,\"Name\":\"Update Firmware\",\"Json\":{\"description\":\"Over the Air update of device firmware\",\"columns\":1,\"order\":8,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"OTA Update\",\"Json\":\"{\\\"name\\\":\\\"OTA Update\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Performs an OTA update\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Sends command to perform OTA update\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":5009,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.8\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"TriggerOTA\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// Trigger OTA\\r\\nvar 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 value for URL\\r\\nvar value = 'http://35.180.127.121:5800/fi_ota';\\r\\nvar value = ascii_to_hexa(value).toUpperCase();\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\n// control command\\r\\nvar command = '04';\\r\\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\\r\\nvar key = '30';\\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLenght = changeEndianness(totalLenght);\\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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1717658930}],"LanguageId":null,"Tags":[]},{"Id":8189,"Group":{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"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\":\"Ask the device for firmware version and stored in Firmware Version\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8192,"Group":{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Last Update","Json":"{\"name\":\"Last Update\",\"default\":\"\",\"description\":\"Last Update Time UTC\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The UTC time of the last update in YYYYMMDDHHmmSS format.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8196,"Group":{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Firmware Version","Json":"{\"name\":\"Firmware Version\",\"default\":\"\",\"description\":\"Device Firmware Version\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"This will be reported by the device and stored here for use in updating the device's firmware version.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8190,"Group":{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Device Reboot","Json":"{\"name\":\"Device Reboot\",\"default\":\"\",\"description\":\"Device Reboot\",\"type\":\"button\",\"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":8191,"Group":{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Device Version","Json":"{\"name\":\"Device Version\",\"default\":\"\",\"description\":\"Device Version\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Select Device Version\",\"options\":[{\"label\":\"Rio\",\"value\":\"1\"},{\"label\":\"OystaCare Watch\",\"value\":\"2\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8195,"Group":{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"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\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8197,"Group":{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Mode","Json":"{\"name\":\"Mode\",\"default\":\"\",\"description\":\"Different modes for communication\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Select Communicate behaviour of the Rio. Cycle = C; Heartbeat = H; Lazy Cycle = LC. Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\",\"options\":[{\"value\":\"01\",\"label\":\"M1: No Cycles until alarm is triggered\"},{\"value\":\"02\",\"label\":\"M2: Always stay online, Location only on movement\"},{\"value\":\"03\",\"label\":\"M3: Always online, Location only on movement, no lazy cycle\"},{\"value\":\"04\",\"label\":\"M4: Only lazy cycles; Location only on lazy cycle.\"},{\"value\":\"05\",\"label\":\"M5: Only lazy cycles, GSM/GPRS/Location off between cycles\"},{\"value\":\"06\",\"label\":\"M6: (default) Sends data on regular cycles, Location only on movement\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":8197,\"Group\":{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Mode\",\"Json\":\"{\\\"name\\\":\\\"Mode\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Different modes for communication\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select Communicate behaviour of the Rio. Cycle = C; Heartbeat = H; Lazy Cycle = LC. Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\\\",\\\"options\\\":[{\\\"value\\\":\\\"01\\\",\\\"label\\\":\\\"M1: No Cycles until alarm is triggered\\\"},{\\\"value\\\":\\\"02\\\",\\\"label\\\":\\\"M2: Always stay online, Location only on movement\\\"},{\\\"value\\\":\\\"03\\\",\\\"label\\\":\\\"M3: Always online, Location only on movement, no lazy cycle\\\"},{\\\"value\\\":\\\"04\\\",\\\"label\\\":\\\"M4: Only lazy cycles; Location only on lazy cycle.\\\"},{\\\"value\\\":\\\"05\\\",\\\"label\\\":\\\"M5: Only lazy cycles, GSM/GPRS/Location off between cycles\\\"},{\\\"value\\\":\\\"06\\\",\\\"label\\\":\\\"M6: (default) Sends data on regular cycles, Location only on movement\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1734001576},{"Type":0,"NewValue":"{\"Id\":8197,\"Group\":{\"Id\":5026,\"Name\":\"Working Mode\",\"Json\":{\"description\":\"Different modes for communication\",\"columns\":1,\"order\":16,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Mode\",\"Json\":\"{\\\"name\\\":\\\"Mode\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Different modes for communication\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select Communicate behaviour of the Rio. Cycle = C; Heartbeat = H; Lazy Cycle = LC. Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\\\",\\\"options\\\":[{\\\"value\\\":\\\"01\\\",\\\"label\\\":\\\"M1: No Cycles until alarm is triggered\\\"},{\\\"value\\\":\\\"02\\\",\\\"label\\\":\\\"M2: Always stay online, Location only on movement\\\"},{\\\"value\\\":\\\"03\\\",\\\"label\\\":\\\"M3: Always online, Location only on movement, no lazy cycle\\\"},{\\\"value\\\":\\\"04\\\",\\\"label\\\":\\\"M4: Only lazy cycles; Location only on lazy cycle.\\\"},{\\\"value\\\":\\\"05\\\",\\\"label\\\":\\\"M5: Only lazy cycles, GSM/GPRS/Location off between cycles\\\"},{\\\"value\\\":\\\"06\\\",\\\"label\\\":\\\"M6: (default) Sends data on regular cycles, Location only on movement\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":3327,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"3.0\",\"FirmwareVersion\":\"V04b.8601.2406.1.0.16.4411.2406.25\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Cycle\",\"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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":3},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1734001582}],"LanguageId":null,"Tags":[]},{"Id":8203,"Group":{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Time Interval","Json":"{\"name\":\"Time Interval\",\"default\":\"\",\"description\":\"Time Interval\",\"type\":\"number\",\"suffix\":\"minutes\",\"prefix\":null,\"min\":10,\"max\":10080,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8187,"Group":{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Warning Time","Json":"{\"name\":\"Warning Time\",\"default\":\"\",\"description\":\"Warning Time\",\"type\":\"number\",\"suffix\":\"minutes\",\"prefix\":\"\",\"min\":1,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The time interval for the warning timer to run\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":8187,\"Group\":{\"Id\":5028,\"Name\":\"Welfare Check\",\"Json\":{\"description\":\"Welfare Check (Only Rio)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Warning Time\",\"Json\":\"{\\\"name\\\":\\\"Warning Time\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Warning Time\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"minutes\\\",\\\"prefix\\\":\\\"\\\",\\\"min\\\":5,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The time interval for the warning timer to run\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1726749319},{"Type":1,"NewValue":"{\"Id\":8187,\"Group\":{\"Id\":5028,\"Name\":\"Welfare Check\",\"Json\":{\"description\":\"Welfare Check (Only Rio)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Warning Time\",\"Json\":\"{\\\"name\\\":\\\"Warning Time\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Warning Time\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"minutes\\\",\\\"prefix\\\":\\\"\\\",\\\"min\\\":2,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The time interval for the warning timer to run\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1726821973}],"LanguageId":null,"Tags":[]},{"Id":8124,"Group":{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Dial Warning Time","Json":"{\"name\":\"Dial Warning Time\",\"default\":\"true\",\"description\":\"Toggle Dial Warning Time\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Turn on Dial on warning time\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":8124,\"Group\":{\"Id\":5028,\"Name\":\"Welfare Check\",\"Json\":{\"description\":\"Welfare Check (Only Rio)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Dial Warning Time\",\"Json\":\"{\\\"name\\\":\\\"Dial Warning Time\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Toggle Dial Warning Time\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Turn on Dial on warning time must be <=2 minutes before the warning time \\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1726746505},{"Type":1,"NewValue":"{\"Id\":8124,\"Group\":{\"Id\":5028,\"Name\":\"Welfare Check\",\"Json\":{\"description\":\"Welfare Check (Only Rio)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Dial Warning Time\",\"Json\":\"{\\\"name\\\":\\\"Dial Warning Time\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Toggle Dial Warning Time\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Turn on Dial on warning time must be <=2 minutes before the check time \\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1726746755}],"LanguageId":null,"Tags":[]},{"Id":8144,"Group":{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Check Time","Json":"{\"name\":\"Check Time\",\"default\":\"\",\"description\":\"Check Time\",\"type\":\"number\",\"suffix\":\"minutes\",\"prefix\":null,\"min\":10,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The time interval for the amber timer to run\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8143,"Group":{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Enable Disable Welfare Check","Json":"{\"name\":\"Enable Disable Welfare Check\",\"default\":\"true\",\"description\":\"Toggle Welfare Check\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Turn on Amber alert.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8168,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Beep","Json":"{\"name\":\"Beep\",\"default\":\"true\",\"description\":\"Enable Beep\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8166,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"GPS Locate","Json":"{\"name\":\"GPS Locate\",\"default\":\"true\",\"description\":\"GPS locating\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8188,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"BLE Locating","Json":"{\"name\":\"BLE Locating\",\"default\":\"true\",\"description\":\"Enable BLE Locating\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Disable if the user is not using beacons or other ble locating technologies. Enabling will increase the time it takes to make a call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8194,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"BLE Stay Connected","Json":"{\"name\":\"BLE Stay Connected\",\"default\":\"true\",\"description\":\"BLE Persistent connection\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8200,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"SOS Call Voice","Json":"{\"name\":\"SOS Call Voice\",\"default\":\"true\",\"description\":\"SOS 2-way Voice\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8201,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"BLE Always ON","Json":"{\"name\":\"BLE Always ON\",\"default\":\"true\",\"description\":\"BLE Always ON\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8202,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Side Call Speaker","Json":"{\"name\":\"Side Call Speaker\",\"default\":\"true\",\"description\":\"Side Call Speaker\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8205,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"WiFi","Json":"{\"name\":\"WiFi\",\"default\":\"false\",\"description\":\"Enable Wifi locating\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enables/Disables the wifi locating function\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8206,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Beacon","Json":"{\"name\":\"Beacon\",\"default\":\"true\",\"description\":\"Enable Location by Beacon\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable/Disable Beacon Location\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8207,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Stop Call Sequence","Json":"{\"name\":\"Stop Call Sequence\",\"default\":\"true\",\"description\":\"Enable Stop Call Sequence\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enables/Disables Stop Call Sequence\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8186,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"SOS Call Speaker","Json":"{\"name\":\"SOS Call Speaker\",\"default\":\"true\",\"description\":\"Enable SOS call speaker\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8185,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Cell Tower Locating","Json":"{\"name\":\"Cell Tower Locating\",\"default\":\"true\",\"description\":\"LBS locating\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Allow the device to track location by cell tower\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8172,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"AlertTCPFast","Json":"{\"name\":\"AlertTCPFast\",\"default\":\"true\",\"description\":\"Send Data before call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Sends the alarm data before the call. WARNING: When enabled, where GPS signal is poor, the location may not be sent with the alarm to the ARC.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8171,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"AGPS","Json":"{\"name\":\"AGPS\",\"default\":\"false\",\"description\":\"AGPS\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Assisted GPS\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8170,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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 Update","Json":"{\"name\":\"Auto Update\",\"default\":\"true\",\"description\":\"Enable FOTA function\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Not Available\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8169,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"LED","Json":"{\"name\":\"LED\",\"default\":\"false\",\"description\":\"Enable status LEDs\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enables/Disables the signal, GPS, Battery LEDs on the front of the device\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8167,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Vibration","Json":"{\"name\":\"Vibration\",\"default\":\"true\",\"description\":\"Enable Vibrate\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8173,"Group":{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Power Off","Json":"{\"name\":\"Power Off\",\"default\":\"\",\"description\":\"Power Off\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8175,"Group":{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Set APN","Json":"{ \"name\": \"Set APN\", \"default\": \"\", \"description\": \"Configure APN\", \"type\": \"apn\", \"suffix\": null, \"prefix\": null, \"min\": null, \"max\": null, \"futureOnly\": null, \"integerOnly\": false, \"isReadOnly\": false, \"isHidden\": null, \"minLength\": null, \"maxLength\": null, \"helpText\": \"ADMIN USE ONLY. Configures which APN is used for the given device. default: Stream.\", \"options\": [ { \"value\": \"stream.co.uk,streamip,streamip\", \"label\": \"Stream\" }, { \"value\": \"tec.cslm2m.com,,\", \"label\": \"CSL (Sweden) \" }, { \"value\": \"data.myeirmobile.ie,,\", \"label\": \"EIR Ire\" }, { \"value\": \"Internet,web,web\", \"label\": \"Vodafone internet - Internet\" }, { \"value\": \"orangeapn,orangeusername,orangepass\", \"label\": \"Orange [Romania]\" }, { \"value\": \"ac.vodafone.es,vodafone,vodafone\", \"label\": \"ac.vodafone.es []\" }, { \"value\": \"geminit2.m2m,,\", \"label\": \"CSL (gemenit2) [UK]\" }, { \"value\": \"geminit2.m2m,,\", \"label\": \"CSL (geminit2) [UK]\" }, { \"value\": \"m2m.vodafone.es,Vodafone,Vodafone\", \"label\": \"m2m.vodafone.es [Spain]\" }, { \"value\": \" ,,\", \"label\": \"None\" }, { \"value\": \"airtelwap.es,wap@wap,wap\", \"label\": \"Vodafone 4G [spain]\" }, { \"value\": \"inet.es,,\", \"label\": \"OIGAA [Spain]\" }, { \"value\": \"inetd.vfes,,\", \"label\": \"Spainiot [Spain]\" }, { \"value\": \"movistar.es,movistar,movistar\", \"label\": \"Movistar Spain [Spain]\" }, { \"value\": \"wlapn.com,deimos,deimos\", \"label\": \"DEIMOS [spain]\" }, { \"value\": \"movistar.es,MOVISTAR,MOVISTAR\", \"label\": \"Movistar\" }, { \"value\": \"airtelnet.es,0,0\", \"label\": \"VodafoneAirtel\" }, { \"value\": \"iot.cslm2m.com,,\", \"label\": \"CSL (IoT) [UK]\" }, { \"value\": \"internetm2m,,\", \"label\": \"Portugal Telecom [Portugal]\" }, { \"value\": \"eapn1.net,web,web\", \"label\": \"Mobius [uk]\" }, { \"value\": \"stream.co.uk,default,void \", \"label\": \"Static Stream []\" }, { \"value\": \"mobile.o2.co.uk,vertigo,password\", \"label\": \"G4S UK O2 [UK]\" }, { \"value\": \"wap.vodafone.co.uk,wap,wap\", \"label\": \"Vodafone WAP [UK]\" }, { \"value\": \"autoselect,,\", \"label\": \"autoselect \" }, { \"value\": \"payandgo.o2.co.uk,payandgo,payandgo\", \"label\": \"O2 (pre-pay) [UK]\" }, { \"value\": \"isp.vodafone.ie,vodafone,vodafone\", \"label\": \"Vodafone (contract) [Ireland]\" }, { \"value\": \"internet,gprs,gprs\", \"label\": \"O2 IRE [Ireland]\" }, { \"value\": \"iot.cslm2m.com,0,0\", \"label\": \"CSL (iot.csl)\" }, { \"value\": \"hs.vodafone.ie ,vodafone,vodafone\", \"label\": \"Vodafone IRE + username and password [Ireland]\" }, { \"value\": \"lpwa.vodafone.iot,,\", \"label\": \"VODAFONE_lpwa \\t [spain]\" }, { \"value\": \"ESEYE1,USER,PASS\", \"label\": \"ESEYE []\" } ], \"toTranslate\": [ \"name\", \"description\", \"helpText\", \"label\" ]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":8175,\"Group\":{\"Id\":5031,\"Name\":\"Set APN\",\"Json\":{\"description\":\"Set APN\",\"columns\":1,\"order\":9,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Set APN\",\"Json\":\"{\\\"name\\\":\\\"Set APN\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Configure APN\\\",\\\"type\\\":\\\"apn\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"ADMIN USE ONLY. Configures which APN is used for the given device. default: Stream.\\\",\\\"options\\\":[{\\\"value\\\":\\\"stream.co.uk,streamip,streamip\\\",\\\"label\\\":\\\"Stream\\\"},{\\\"value\\\":\\\"tec.cslm2m.com,,\\\",\\\"label\\\":\\\"CSL (Sweden) \\\"},{\\\"value\\\":\\\"data.myeirmobile.ie,,\\\",\\\"label\\\":\\\"EIR Ire\\\"},{\\\"value\\\":\\\"Internet,web,web\\\",\\\"label\\\":\\\"Vodafone internet - Internet\\\"},{\\\"value\\\":\\\"orangeapn,orangeusername,orangepass\\\",\\\"label\\\":\\\"Orange [Romania]\\\"},{\\\"value\\\":\\\"ac.vodafone.es,vodafone,vodafone\\\",\\\"label\\\":\\\"ac.vodafone.es []\\\"},{\\\"value\\\":\\\"geminit2.m2m,,\\\",\\\"label\\\":\\\"CSL (gemenit2) [UK]\\\"},{\\\"value\\\":\\\"geminit2.m2m,,\\\",\\\"label\\\":\\\"CSL (geminit2) [UK]\\\"},{\\\"value\\\":\\\"m2m.vodafone.es,Vodafone,Vodafone\\\",\\\"label\\\":\\\"m2m.vodafone.es [Spain]\\\"},{\\\"value\\\":\\\" ,,\\\",\\\"label\\\":\\\"None\\\"},{\\\"value\\\":\\\"airtelwap.es,wap@wap,wap\\\",\\\"label\\\":\\\"Vodafone 4G [spain]\\\"},{\\\"value\\\":\\\"inet.es,,\\\",\\\"label\\\":\\\"OIGAA [Spain]\\\"},{\\\"value\\\":\\\"inetd.vfes,,\\\",\\\"label\\\":\\\"Spainiot [Spain]\\\"},{\\\"value\\\":\\\"movistar.es,movistar,movistar\\\",\\\"label\\\":\\\"Movistar Spain [Spain]\\\"},{\\\"value\\\":\\\"wlapn.com,deimos,deimos\\\",\\\"label\\\":\\\"DEIMOS [spain]\\\"},{\\\"value\\\":\\\"movistar.es,MOVISTAR,MOVISTAR\\\",\\\"label\\\":\\\"Movistar\\\"},{\\\"value\\\":\\\"airtelnet.es,0,0\\\",\\\"label\\\":\\\"VodafoneAirtel\\\"},{\\\"value\\\":\\\"iot.cslm2m.com,,\\\",\\\"label\\\":\\\"CSL (IoT) [UK]\\\"},{\\\"value\\\":\\\"internetm2m,,\\\",\\\"label\\\":\\\"Portugal Telecom [Portugal]\\\"},{\\\"value\\\":\\\"eapn1.net,web,web\\\",\\\"label\\\":\\\"Mobius [uk]\\\"},{\\\"value\\\":\\\"stream.co.uk,default,void \\\",\\\"label\\\":\\\"Static Stream []\\\"},{\\\"value\\\":\\\"mobile.o2.co.uk,vertigo,password\\\",\\\"label\\\":\\\"G4S UK O2 [UK]\\\"},{\\\"value\\\":\\\"wap.vodafone.co.uk,wap,wap\\\",\\\"label\\\":\\\"Vodafone WAP [UK]\\\"},{\\\"value\\\":\\\"autoselect,,\\\",\\\"label\\\":\\\"autoselect \\\"},{\\\"value\\\":\\\"payandgo.o2.co.uk,payandgo,payandgo\\\",\\\"label\\\":\\\"O2 (pre-pay) [UK]\\\"},{\\\"value\\\":\\\"isp.vodafone.ie,vodafone,vodafone\\\",\\\"label\\\":\\\"Vodafone (contract) [Ireland]\\\"},{\\\"value\\\":\\\"internet,gprs,gprs\\\",\\\"label\\\":\\\"O2 IRE [Ireland]\\\"},{\\\"value\\\":\\\"iot.cslm2m.com,0,0\\\",\\\"label\\\":\\\"CSL (iot.csl)\\\"},{\\\"value\\\":\\\"hs.vodafone.ie ,vodafone,vodafone\\\",\\\"label\\\":\\\"Vodafone IRE + username and password [Ireland]\\\"},{\\\"value\\\":\\\"lpwa.vodafone.iot,,\\\",\\\"label\\\":\\\"VODAFONE_lpwa \\\\t [spain]\\\"},{\\\"value\\\":\\\"ESEYE1,USER,PASS\\\",\\\"label\\\":\\\"ESEYE []\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1700220928}],"LanguageId":null,"Tags":[]},{"Id":8176,"Group":{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Request Location","Json":"{\"name\":\"Request Location\",\"default\":\"\",\"description\":\"Real Time Locate\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Request the current location of the device\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":8176,\"Group\":{\"Id\":5032,\"Name\":\"Request Location\",\"Json\":{\"description\":\"Request Location\",\"columns\":1,\"order\":13,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Location\",\"Json\":\"{\\\"name\\\":\\\"Request Location\\\",\\\"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\\\":\\\"Request the current location of the device\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1733323424}],"LanguageId":null,"Tags":[]},{"Id":8177,"Group":{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Delete Records","Json":"{\"name\":\"Delete Records\",\"default\":\"\",\"description\":\"Delete buffered messages\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8178,"Group":{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Enable Disable SMS Password","Json":"{\"name\":\"Enable Disable SMS Password\",\"default\":\"true\",\"description\":\"Enable Disable SMS Password\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8179,"Group":{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"SMS Password","Json":"{\"name\":\"SMS Password\",\"default\":\"\",\"description\":null,\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":6,\"helpText\":\"\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8180,"Group":{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Set Server","Json":"{\"name\":\"Set Server\",\"default\":\"\",\"description\":\"Configure Primary Server\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":false,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"ADMIN USE ONLY. This sets the location to which a device communicates\",\"options\":[{\"value\":\"52.174.17.77,5678\",\"label\":\"Acceptance Receiver\"},{\"value\":\"52.232.85.255,5678\",\"label\":\"Production Receiver\"},{\"value\":\"52.232.85.255,7117\",\"label\":\"Old Sockets Production\"},{\"value\":\",\",\"label\":\"None\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":8180,\"Group\":{\"Id\":5035,\"Name\":\"Server\",\"Json\":{\"description\":\"Server\",\"columns\":1,\"order\":10,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Set Server\",\"Json\":\"{\\\"name\\\":\\\"Set Server\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Configure Primary Server\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"ADMIN USE ONLY. This sets the location to which a device communicates\\\",\\\"options\\\":[{\\\"value\\\":\\\"52.174.17.77,5678\\\",\\\"label\\\":\\\"Acceptance Receiver\\\"},{\\\"value\\\":\\\"52.232.85.255,5678\\\",\\\"label\\\":\\\"Production Receiver\\\"},{\\\"value\\\":\\\"52.232.85.255,7117\\\",\\\"label\\\":\\\"Old Sockets Production\\\"},{\\\"value\\\":\\\",\\\",\\\"label\\\":\\\"None\\\"},{\\\"label\\\":\\\"Staging Protocol Import\\\",\\\"value\\\":\\\"52.174.17.77,5778\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1728284696}],"LanguageId":null,"Tags":[]},{"Id":8182,"Group":{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Interval","Json":"{\"name\":\"Interval\",\"default\":\"\",\"description\":\"Interval\",\"type\":\"number\",\"suffix\":\"minutes\",\"prefix\":null,\"min\":1,\"max\":10,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The interval at which the Rio will transmit location data after an SOS is triggered.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8181,"Group":{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Duration","Json":"{\"name\":\"Duration\",\"default\":\"\",\"description\":\"Duration\",\"type\":\"number\",\"suffix\":\"minutes\",\"prefix\":null,\"min\":1,\"max\":30,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"How long the continuous locate will last\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8184,"Group":{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Lazy Cycle Interval","Json":"{\"name\":\"Lazy Cycle Interval\",\"default\":\"\",\"description\":\"Lazy Cycle Frequency\",\"type\":\"number\",\"suffix\":\"minutes\",\"prefix\":null,\"min\":5,\"max\":1440,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"When at rest the Rio will reduce the interval at which it reports to IntelliCare to the chosen value. \",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8183,"Group":{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Heartbeat Interval","Json":"{\"name\":\"Heartbeat Interval\",\"default\":\"\",\"description\":\"Heartbeat Frequency\",\"type\":\"number\",\"suffix\":\"minutes\",\"prefix\":null,\"min\":1,\"max\":5,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The Rio will send \\\"heartbeats\\\" to IntelliCare to maintain the network connection\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8120,"Group":{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Cycle Interval","Json":"{\"name\":\"Cycle Interval\",\"default\":\"\",\"description\":\"Cycle Interval\",\"type\":\"number\",\"suffix\":\"minutes\",\"prefix\":null,\"min\":1,\"max\":1440,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The interval the Rio will send regular updates to IntelliCare\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":8120,\"Group\":{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":14,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Cycle Interval\",\"Json\":\"{\\\"name\\\":\\\"Cycle Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Cycle Interval\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"minutes\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The interval the Rio will send regular updates to IntelliCare\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1696074130},{"Type":1,"NewValue":"{\"Id\":8120,\"Group\":{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Cycle Interval\",\"Json\":\"{\\\"name\\\":\\\"Cycle Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Cycle Interval\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"minutes\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The interval the Rio will send regular updates to IntelliCare\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1734001517},{"Type":0,"NewValue":"{\"Id\":8120,\"Group\":{\"Id\":5037,\"Name\":\"Cycle Interval\",\"Json\":{\"description\":\"Cycle Interval\",\"columns\":1,\"order\":17,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Cycle Interval\",\"Json\":\"{\\\"name\\\":\\\"Cycle Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Cycle Interval\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"minutes\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The interval the Rio will send regular updates to IntelliCare\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":3317,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"3.0\",\"FirmwareVersion\":\"V04b.8601.2406.1.0.16.4411.2406.25\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Working Mode\",\"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 localTesting = false;\\r\\nif (localTesting) var params = {\\r\\n 'CycleInterval': {\\r\\n 'CycleInterval': 10,\\r\\n 'LazyCycleInterval': 60\\r\\n },\\r\\n 'WorkingMode': {\\r\\n 'Mode': '06'\\r\\n }\\r\\n};\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Select Communicate behaviour of the Rio.\\r\\n// Cycle = C; Heartbeat = H; Lazy Cycle = LC. \\r\\n//Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\\r\\n// load parameters Cycle interval and Lazy cycle interval\\r\\nif (params.CycleInterval.CycleInterval) {\\r\\n var cycleInterval = parseInt(params.CycleInterval.CycleInterval) * 60;\\r\\n} else var cycleInterval = 600;\\r\\nif (params.CycleInterval.LazyCycleInterval) {\\r\\n var lazyCycleInterval = parseInt(params.CycleInterval.LazyCycleInterval) * 60;\\r\\n} else var lazyCycleInterval = 3600;\\r\\n// Check selected working mode\\r\\nif (params.WorkingMode.Mode) {\\r\\n var mode = params.WorkingMode.Mode;\\r\\n} else {\\r\\n var mode = '06';\\r\\n} // default mode 6\\r\\n// improve command to add both GPRS and SMS comunication\\r\\nswitch (mode) {\\r\\n case '02':\\r\\n case '06':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M,' + lazyCycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '03':\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M';\\r\\n break;\\r\\n case '04':\\r\\n case '05': // add time interval to the command\\r\\n if (cycleInterval) {\\r\\n var value = parseInt(cycleInterval);\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + cycleInterval / 60 + 'M';\\r\\n } else {\\r\\n var value = 60 * 60; // default value 60*60 seconds\\r\\n value = decimalToHex(value);\\r\\n value = ('000000' + value).slice(-6).toUpperCase();\\r\\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\n var valueSMS = ',' + 60 + 'M';\\r\\n }\\r\\n break;\\r\\n default:\\r\\n var value = '000000'; // Time interval to zero\\r\\n var valueSMS = '';\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar keyLength = '05';\\r\\nvar key = '0A';\\r\\nvar messageBody = command + keyLength + key + value + mode;\\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' + '0700' + 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 = 'mode' + mode.substring(1) + valueSMS;\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\ndebug(data);\\r\\ndebug(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 debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":2,\"Order\":2},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1734001523}],"LanguageId":null,"Tags":[{"Id":1714,"Name":"cycleInterval","BackendAction":"cycleInterval","Value":""}]},{"Id":8209,"Group":{"Id":5038,"Name":"System Language","Json":{"description":"System Language","columns":1,"order":14,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5010,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5012,"Name":"SMS Prefix","Json":{"description":"SMS Prefix","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5020,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5021,"Name":"Voice Prompt","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5023,"Name":"Device Reboot","Json":{"description":"Device Reboot","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5024,"Name":"Device Version","Json":{"description":"Device Version","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5025,"Name":"Factory Reset","Json":{"description":"Factory Reset","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5030,"Name":"Power Off","Json":{"description":"Power Off","columns":1,"order":18,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5031,"Name":"Set APN","Json":{"description":"Set APN","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5032,"Name":"Request Location","Json":{"description":"Request Location","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5033,"Name":"Delete Records","Json":{"description":"Delete Records","columns":1,"order":15,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5034,"Name":"SMS Password","Json":{"description":"Function not available","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5035,"Name":"Server","Json":{"description":"Server","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5036,"Name":"Continuous Locate","Json":{"description":"Continuous Locate if Alert is triggered","columns":1,"order":13,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","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":"Language","Json":"{\"name\":\"Language\",\"default\":\"\",\"description\":\"Change to local language\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Choose Rio language\",\"options\":[{\"label\":\"English\",\"value\":\"en-US\"},{\"label\":\"Spanish\",\"value\":\"es-ES\"},{\"label\":\"German\",\"value\":\"de-DE\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":8209,\"Group\":{\"Id\":5038,\"Name\":\"System Language\",\"Json\":{\"description\":\"System Language\",\"columns\":1,\"order\":19,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Language\",\"Json\":\"{\\\"name\\\":\\\"Language\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Change to local language\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Choose Rio language\\\",\\\"options\\\":[{\\\"value\\\":\\\"en-US\\\",\\\"label\\\":\\\"English\\\"},{\\\"value\\\":\\\"es-ES\\\",\\\"label\\\":\\\"Spanish\\\"},{\\\"value\\\":\\\"de-DE\\\",\\\"label\\\":\\\"German\\\"},{\\\"label\\\":\\\"Portuguese\\\",\\\"value\\\":\\\"pt-PT\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1729253638}],"LanguageId":null,"Tags":[]},{"Id":8238,"Group":{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Beacon Name 10","Json":"{\"name\":\"Beacon Name 10\",\"default\":\"\",\"description\":\"Beacon Name 10\",\"type\":\"beacon\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8237,"Group":{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Enable Disable Beacon 10","Json":"{\"name\":\"Enable Disable Beacon 10\",\"default\":\"false\",\"description\":\"Beacon Name 10\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8226,"Group":{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Monday","Json":"{\"name\":\"Monday\",\"default\":\"true\",\"description\":\"Monday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8232,"Group":{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Saturday","Json":"{\"name\":\"Saturday\",\"default\":\"true\",\"description\":\"Sautrday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":8}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8231,"Group":{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Friday","Json":"{\"name\":\"Friday\",\"default\":\"true\",\"description\":\"Friday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":7}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8230,"Group":{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Sunday","Json":"{\"name\":\"Sunday\",\"default\":\"true\",\"description\":\"Sunday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":9}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8229,"Group":{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Time","Json":"{\"name\":\"Time\",\"default\":\"\",\"description\":\"Time\",\"type\":\"time\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8228,"Group":{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Thursday","Json":"{\"name\":\"Thursday\",\"default\":\"true\",\"description\":\"Thursday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":6}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8227,"Group":{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Tuesday","Json":"{\"name\":\"Tuesday\",\"default\":\"true\",\"description\":\"Tuesday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8224,"Group":{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Duration","Json":"{\"name\":\"Duration\",\"default\":\"\",\"description\":\"Duration\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":1,\"max\":120,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8223,"Group":{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Wednesday","Json":"{\"name\":\"Wednesday\",\"default\":\"true\",\"description\":\"Wednesday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":5}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8220,"Group":{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Alarm Clock 2","Json":"{\"name\":\"Enable Disable Alarm Clock 2\",\"default\":\"true\",\"description\":\"Toggle Alarm Clock 2\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8215,"Group":{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Wednesday","Json":"{\"name\":\"Wednesday\",\"default\":\"true\",\"description\":\"Wednesday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":9}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8216,"Group":{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Tuesday","Json":"{\"name\":\"Tuesday\",\"default\":\"true\",\"description\":\"Tuesday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":8}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8217,"Group":{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Time","Json":"{\"name\":\"Time\",\"default\":\"\",\"description\":\"Time\",\"type\":\"time\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8221,"Group":{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Alarm Clock 3","Json":"{\"name\":\"Enable Disable Alarm Clock 3\",\"default\":\"true\",\"description\":\"Toggle Alarm Clock 3\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8222,"Group":{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Sunday","Json":"{\"name\":\"Sunday\",\"default\":\"true\",\"description\":\"Sunday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":6}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8219,"Group":{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Monday","Json":"{\"name\":\"Monday\",\"default\":\"true\",\"description\":\"Monday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8233,"Group":{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Friday","Json":"{\"name\":\"Friday\",\"default\":\"true\",\"description\":\"Friday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8214,"Group":{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Saturday","Json":"{\"name\":\"Saturday\",\"default\":\"true\",\"description\":\"Saturday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":5}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8210,"Group":{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Thursday","Json":"{\"name\":\"Thursday\",\"default\":\"true\",\"description\":\"Thursday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":7}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8213,"Group":{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Duration","Json":"{\"name\":\"Duration\",\"default\":\"\",\"description\":\"Duration\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":1,\"max\":120,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8258,"Group":{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Thursday","Json":"{\"name\":\"Thursday\",\"default\":\"true\",\"description\":\"Thursday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":6}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8256,"Group":{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Tuesday","Json":"{\"name\":\"Tuesday\",\"default\":\"true\",\"description\":\"Tuesday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8262,"Group":{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Alarm Clock 1","Json":"{\"name\":\"Enable Disable Alarm Clock 1\",\"default\":\"true\",\"description\":\"Toggle Alarm Clock 1\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8261,"Group":{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Saturday","Json":"{\"name\":\"Saturday\",\"default\":\"true\",\"description\":\"Saturday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":8}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8259,"Group":{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Friday","Json":"{\"name\":\"Friday\",\"default\":\"true\",\"description\":\"Friday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":7}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8257,"Group":{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Wednesday","Json":"{\"name\":\"Wednesday\",\"default\":\"true\",\"description\":\"Wednesday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":5}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8268,"Group":{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Time","Json":"{\"name\":\"Time\",\"default\":\"\",\"description\":\"Time\",\"type\":\"time\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8265,"Group":{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Duration","Json":"{\"name\":\"Duration\",\"default\":\"\",\"description\":\"Duration\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":1,\"max\":120,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8264,"Group":{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Monday","Json":"{\"name\":\"Monday\",\"default\":\"true\",\"description\":\"Monday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8263,"Group":{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Sunday","Json":"{\"name\":\"Sunday\",\"default\":\"true\",\"description\":\"Sunday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":9}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8269,"Group":{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Enable Disable Beacon 1","Json":"{\"name\":\"Enable Disable Beacon 1\",\"default\":\"\",\"description\":\"Enable Disable Beacon 1\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8266,"Group":{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Beacon Name 1","Json":"{\"name\":\"Beacon Name 1\",\"default\":\"\",\"description\":\"Beacon Name 1\",\"type\":\"beacon\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8267,"Group":{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Enable Disable Beacon 2","Json":"{\"name\":\"Enable Disable Beacon 2\",\"default\":\"\",\"description\":\"Enable Disable Beacon 2\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8253,"Group":{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Beacon Name 2","Json":"{\"name\":\"Beacon Name 2\",\"default\":\"\",\"description\":\"Beacon Name 2\",\"type\":\"beacon\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8251,"Group":{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Beacon Name 3","Json":"{\"name\":\"Beacon Name 3\",\"default\":\"\",\"description\":\"Beacon Name 3\",\"type\":\"beacon\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8252,"Group":{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Enable Disable Beacon 3","Json":"{\"name\":\"Enable Disable Beacon 3\",\"default\":\"\",\"description\":\"Enable Disable Beacon 3\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8249,"Group":{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Beacon Name 4","Json":"{\"name\":\"Beacon Name 4\",\"default\":\"\",\"description\":\"Beacon Name 4\",\"type\":\"beacon\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8250,"Group":{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Enable Disable Beacon 4","Json":"{\"name\":\"Enable Disable Beacon 4\",\"default\":\"\",\"description\":\"Enable Disable Beacon 4\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8248,"Group":{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Beacon Name 5","Json":"{\"name\":\"Beacon Name 5\",\"default\":\"\",\"description\":\"Beacon Name 5\",\"type\":\"beacon\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8247,"Group":{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Enable Disable Beacon 5","Json":"{\"name\":\"Enable Disable Beacon 5\",\"default\":\"\",\"description\":\"Enable Disable Beacon 5\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8244,"Group":{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Beacon Name 7","Json":"{\"name\":\"Beacon Name 7\",\"default\":\"\",\"description\":\"Beacon Name 7\",\"type\":\"beacon\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8243,"Group":{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Enable Disable Beacon 7","Json":"{\"name\":\"Enable Disable Beacon 7\",\"default\":\"\",\"description\":\"Enable Disable Beacon 7\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8242,"Group":{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Beacon Name 8","Json":"{\"name\":\"Beacon Name 8\",\"default\":\"\",\"description\":\"Beacon Name 8\",\"type\":\"beacon\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8241,"Group":{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Enable Disable Beacon 8","Json":"{\"name\":\"Enable Disable Beacon 8\",\"default\":\"\",\"description\":\"Enable Disable Beacon 8\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8239,"Group":{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Enable Disable Beacon 9","Json":"{\"name\":\"Enable Disable Beacon 9\",\"default\":\"false\",\"description\":\"Enable Disable Beacon 9\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8240,"Group":{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","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":"Beacon Name 9","Json":"{\"name\":\"Beacon Name 9\",\"default\":\"\",\"description\":\"Beacon Name 9\",\"type\":\"beacon\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8255,"Group":{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","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":"Monday","Json":"{\"name\":\"Monday\",\"default\":\"true\",\"description\":\"Monday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8260,"Group":{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","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":"Friday","Json":"{\"name\":\"Friday\",\"default\":\"true\",\"description\":\"Friday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":7}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8234,"Group":{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","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":"Thursday","Json":"{\"name\":\"Thursday\",\"default\":\"true\",\"description\":\"Thursday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":6}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8225,"Group":{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","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":"Wednesday","Json":"{\"name\":\"Wednesday\",\"default\":\"true\",\"description\":\"Wednesday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":5}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8218,"Group":{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","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":"Tuesday","Json":"{\"name\":\"Tuesday\",\"default\":\"true\",\"description\":\"Tuesday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8212,"Group":{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","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 Alarm Clock 4","Json":"{\"name\":\"Enable Disable Alarm Clock 4\",\"default\":\"true\",\"description\":\"Toggle Alarm Clock 4\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8211,"Group":{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","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":"Duration","Json":"{\"name\":\"Duration\",\"default\":\"\",\"description\":\"Duration\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":1,\"max\":120,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8235,"Group":{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","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\",\"type\":\"time\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8236,"Group":{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","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":"Saturday","Json":"{\"name\":\"Saturday\",\"default\":\"true\",\"description\":\"Saturday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":8}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8254,"Group":{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5013,"Name":"Alarm Clock","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","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":"Sunday","Json":"{\"name\":\"Sunday\",\"default\":\"true\",\"description\":\"Sunday\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":9}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8246,"Group":{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"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 Beacon 6","Json":"{\"name\":\"Enable Disable Beacon 6\",\"default\":\"false\",\"description\":\"Enable Disable Beacon 6\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8245,"Group":{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5027,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"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":"Beacon Name 6","Json":"{\"name\":\"Beacon Name 6\",\"default\":\"\",\"description\":\"Beacon Name 6\",\"type\":\"beacon\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8314,"Group":{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Dial","Json":"{\"name\":\"Dial\",\"default\":\"true\",\"description\":\"Dial\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"dial the number configured in the SOS settings\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8313,"Group":{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Fall Down Alert","Json":"{\"name\":\"Enable Disable Fall Down Alert\",\"default\":\"true\",\"description\":\"Toggle Fall alert\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"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":8270,"Group":{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Sensitivity","Json":"{\"name\":\"Sensitivity\",\"default\":\"\",\"description\":\"Sensitivity\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":1,\"max\":9,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"1-9 (9 high sensitivity/low trigger)\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8307,"Group":{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Time","Json":"{\"name\":\"Time\",\"default\":\"\",\"description\":\"Time in motion\",\"type\":\"number\",\"suffix\":\"seconds\",\"prefix\":null,\"min\":3,\"max\":600,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Time the VIP needs to be moving before the cool down period in order to trigger the movement alarm\\n\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8309,"Group":{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Dial","Json":"{\"name\":\"Dial\",\"default\":\"true\",\"description\":\"Dial\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"check to dial the configured number for SOS.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8310,"Group":{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Motion Alert","Json":"{\"name\":\"Enable Disable Motion Alert\",\"default\":\"true\",\"description\":\"Toggle Movement alert\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle the feature for raising an alarm on movement after a specified period\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8308,"Group":{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Cooldown","Json":"{\"name\":\"Cooldown\",\"default\":\"\",\"description\":\"Static duration\",\"type\":\"number\",\"suffix\":\"seconds\",\"prefix\":null,\"min\":60,\"max\":36000,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"How long a VIP needs to be still before the movement alarm is triggered\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8297,"Group":{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Call","Json":"{\"name\":\"Call\",\"default\":\"\",\"description\":\"Call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle Call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8298,"Group":{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Name","Json":"{\"name\":\"Name\",\"default\":\"\",\"description\":\"Contact Name\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":8,\"helpText\":\"Insert Contact Name\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8299,"Group":{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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 White List Number 6","Json":"{\"name\":\"Enable Disable White List Number 6\",\"default\":\"true\",\"description\":\"Toggle White list Number 6\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8300,"Group":{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Number","Json":"{\"name\":\"Number\",\"default\":\"\",\"description\":\"Phone Number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8296,"Group":{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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 White List Number 8","Json":"{\"name\":\"Enable Disable White List Number 8\",\"default\":\"true\",\"description\":\"Toggle White list Number 8\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8295,"Group":{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Number","Json":"{\"name\":\"Number\",\"default\":\"\",\"description\":\"Phone Number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8294,"Group":{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Call","Json":"{\"name\":\"Call\",\"default\":\"\",\"description\":\"Call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"add Toggle Call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8293,"Group":{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Name","Json":"{\"name\":\"Name\",\"default\":\"\",\"description\":\"Contact Name\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":8,\"helpText\":\"Insert Contact Name\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8290,"Group":{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Name","Json":"{\"name\":\"Name\",\"default\":\"\",\"description\":\"Contact Name\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":8,\"helpText\":\"Insert Contact Name\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8292,"Group":{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Number","Json":"{\"name\":\"Number\",\"default\":\"\",\"description\":\"Phone Number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8291,"Group":{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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 White List Number 7","Json":"{\"name\":\"Enable Disable White List Number 7\",\"default\":\"true\",\"description\":\"Toggle White list Number 7\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8289,"Group":{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Call","Json":"{\"name\":\"Call\",\"default\":\"\",\"description\":\"Call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"add Toggle Call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8286,"Group":{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Name","Json":"{\"name\":\"Name\",\"default\":\"\",\"description\":\"Contact Name\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":8,\"helpText\":\"Insert Contact Name\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8287,"Group":{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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 White List Number 5","Json":"{\"name\":\"Enable Disable White List Number 5\",\"default\":\"true\",\"description\":\"Toggle White list Number 5\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8288,"Group":{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Number","Json":"{\"name\":\"Number\",\"default\":\"\",\"description\":\"Phone Number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8285,"Group":{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Call","Json":"{\"name\":\"Call\",\"default\":\"\",\"description\":\"Call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle Call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8283,"Group":{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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 White List Number 2","Json":"{\"name\":\"Enable Disable White List Number 2\",\"default\":\"true\",\"description\":\"Toggle White list Number 2\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8284,"Group":{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Number","Json":"{\"name\":\"Number\",\"default\":\"\",\"description\":\"Phone Number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8281,"Group":{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Call","Json":"{\"name\":\"Call\",\"default\":\"\",\"description\":\"Call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle Call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8282,"Group":{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Name","Json":"{\"name\":\"Name\",\"default\":\"\",\"description\":\"Contact Name\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":8,\"helpText\":\"Insert Contact Name\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8280,"Group":{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Number","Json":"{\"name\":\"Number\",\"default\":\"\",\"description\":\"Phone number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8277,"Group":{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Call","Json":"{\"name\":\"Call\",\"default\":\"\",\"description\":\"Call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle Call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8278,"Group":{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Name","Json":"{\"name\":\"Name\",\"default\":\"\",\"description\":\"Contact Name\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":8,\"helpText\":\"Insert Contact Name\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8279,"Group":{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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 White List Number 1","Json":"{\"name\":\"Enable Disable White List Number 1\",\"default\":\"true\",\"description\":\"Toggle White List Number 1\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8334,"Group":{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Call","Json":"{\"name\":\"Call\",\"default\":\"\",\"description\":\"Call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle Call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8272,"Group":{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Number","Json":"{\"name\":\"Number\",\"default\":\"\",\"description\":\"Phone Number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8301,"Group":{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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 White List Number 4","Json":"{\"name\":\"Enable Disable White List Number 4\",\"default\":\"true\",\"description\":\"Toggle White list Number 4\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8303,"Group":{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","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":"Name","Json":"{\"name\":\"Name\",\"default\":\"\",\"description\":\"Contact Name\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":8,\"helpText\":\"Insert Contact Name\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8271,"Group":{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Angle","Json":"{\"name\":\"Angle\",\"default\":\"\",\"description\":\"Angle\",\"type\":\"number\",\"suffix\":\"degrees\",\"prefix\":null,\"min\":0,\"max\":90,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The angle required for the Tilt alert to be raised\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8302,"Group":{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Tilt Alert","Json":"{\"name\":\"Enable Disable Tilt Alert\",\"default\":\"true\",\"description\":\"Toggle Tilt alert\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggles feature to enables the Rio to raise an alarm based on an angle change of the VIP for a specified time period\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8305,"Group":{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Time","Json":"{\"name\":\"Time\",\"default\":\"\",\"description\":\"Time\",\"type\":\"number\",\"suffix\":\"seconds\",\"prefix\":null,\"min\":10,\"max\":3600,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The time required at the configured angle to trigger the tilt alert\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8306,"Group":{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Dial","Json":"{\"name\":\"Dial\",\"default\":\"true\",\"description\":\"Dial\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8304,"Group":{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"Volume","Json":"{\"name\":\"Volume\",\"default\":\"\",\"description\":\"Volume\",\"type\":\"number\",\"suffix\":\"%\",\"prefix\":null,\"min\":0,\"max\":100,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Volume setting for the voice prompts\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8335,"Group":{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"Volume","Json":"{\"name\":\"Volume\",\"default\":\"\",\"description\":\"Volume\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":0,\"max\":15,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"the volume of the mic during a call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8332,"Group":{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"Volume","Json":"{\"name\":\"Volume\",\"default\":\"\",\"description\":\"Volume\",\"type\":\"number\",\"suffix\":\"%\",\"prefix\":null,\"min\":0,\"max\":100,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The volume of the ring tone when the Rio is called directly.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8329,"Group":{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"Start","Json":"{\"name\":\"Start\",\"default\":\"\",\"description\":\"Start\",\"type\":\"time\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8330,"Group":{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"End","Json":"{\"name\":\"End\",\"default\":\"\",\"description\":\"End\",\"type\":\"time\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8331,"Group":{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"Enable Disable No Disturb","Json":"{\"name\":\"Enable Disable No Disturb\",\"default\":\"true\",\"description\":\"Toggle Do not disturb\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle feature that specifies a time period during the day when the Rio will not make any sound\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8326,"Group":{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"White List","Json":"{\"name\":\"White List\",\"default\":\"true\",\"description\":\"Call Allow list\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"toggles the allow list of members who can call the Rio\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8327,"Group":{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"Auto Answer After Rings","Json":"{\"name\":\"Auto Answer After Rings\",\"default\":\"\",\"description\":\"Auto-answer after no. of rings\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":0,\"max\":10,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Number of rings the care circle will wait before the Rio auto answers the call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8328,"Group":{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"Auto Answer","Json":"{\"name\":\"Auto Answer\",\"default\":\"true\",\"description\":\"Auto-Answer\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"toggles feature that enables a number in the whitelist to call through the Rio without any interaction required by the VIP\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8323,"Group":{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"Silent Call Mode","Json":"{\"name\":\"Silent Call Mode\",\"default\":\"\",\"description\":\"Silent-Call Mode\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8324,"Group":{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"Button Hang Up","Json":"{\"name\":\"Button Hang Up\",\"default\":\"true\",\"description\":\"Disconnect call by button\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable disconnecting a call by a button\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8325,"Group":{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","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":"SMS White List","Json":"{\"name\":\"SMS White List\",\"default\":\"true\",\"description\":\"SMS Allow List\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle the ability to restrict numbers that can send SMS to the device\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8322,"Group":{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Dial","Json":"{\"name\":\"Dial\",\"default\":\"true\",\"description\":\"Dial\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8321,"Group":{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Time","Json":"{\"name\":\"Time\",\"default\":\"\",\"description\":\"Time in non-movement\",\"type\":\"number\",\"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\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8320,"Group":{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable No Motion Alert","Json":"{\"name\":\"Enable Disable No Motion Alert\",\"default\":\"true\",\"description\":\"Toggle Non-movement alert\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"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":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8318,"Group":{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Power Low","Json":"{\"name\":\"Power Low\",\"default\":\"true\",\"description\":\"Battery Low\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8316,"Group":{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Power On","Json":"{\"name\":\"Power On\",\"default\":\"true\",\"description\":\"Power On\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":false,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8315,"Group":{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Power Alert","Json":"{\"name\":\"Enable Disable Power Alert\",\"default\":\"true\",\"description\":\"Toggle Power Alerts\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8319,"Group":{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Low Power Threshold","Json":"{\"name\":\"Low Power Threshold\",\"default\":\"\",\"description\":\"Low Power Threshold %\",\"type\":\"number\",\"suffix\":\"%\",\"prefix\":null,\"min\":10,\"max\":50,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Set the threshold at which the low threshold is raised.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8317,"Group":{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Power Off","Json":"{\"name\":\"Power Off\",\"default\":\"true\",\"description\":\"Power Off\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8311,"Group":{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","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":"Speed","Json":"{\"name\":\"Speed\",\"default\":\"\",\"description\":\"Speed\",\"type\":\"number\",\"suffix\":\"kph\",\"prefix\":null,\"min\":20,\"max\":400,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The speed in kph required to trigger the over speed alarm\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8312,"Group":{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","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 Over Speed Alert","Json":"{\"name\":\"Enable Disable Over Speed Alert\",\"default\":\"true\",\"description\":\"Toggle Over Speed Alert\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle feature that enables raising an alarm when the VIP goes above a specified speed.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8333,"Group":{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","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":"Volume","Json":"{\"name\":\"Volume\",\"default\":\"\",\"description\":\"Volume\",\"type\":\"number\",\"suffix\":\"%\",\"prefix\":null,\"min\":0,\"max\":100,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Volume of the speaker\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8273,"Group":{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Call","Json":"{\"name\":\"Call\",\"default\":\"\",\"description\":\"Call\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle Call\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8275,"Group":{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Number","Json":"{\"name\":\"Number\",\"default\":\"\",\"description\":\"Phone Number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8276,"Group":{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable White List Number 3","Json":"{\"name\":\"Enable Disable White List Number 3\",\"default\":\"true\",\"description\":\"Toggle White list Number 3\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8274,"Group":{"Id":5072,"Name":"White List Number 3","Json":{"description":"White List Number 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5018,"Name":"White List","Json":{"description":null,"columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5011,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5013,"Name":"Alarm Clock","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":5040,"Name":"Alarm Clock 2","Json":{"description":"Alarm Clock 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5041,"Name":"Alarm Clock 3","Json":{"description":"Alarm Clock 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5042,"Name":"Alarm Clock 1","Json":{"description":"Alarm Clock 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5051,"Name":"Alarm Clock 4","Json":{"description":"Alarm Clock 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5014,"Name":"SOS Button Settings","Json":{"description":"SOS Button Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5015,"Name":"Alerts","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5053,"Name":"Fall Alarm","Json":{"description":"Fall Alarm","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5054,"Name":"Movement Alert","Json":{"description":"Movement Alert","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5062,"Name":"Tilt Alert","Json":{"description":"Tilt Alert","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5068,"Name":"NonMovement Alert","Json":{"description":"Non-movement Alert","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5069,"Name":"Power Alert","Json":{"description":"Power Alert","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5070,"Name":"Over Speed Alert","Json":{"description":"Over Speed Alert","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5016,"Name":"Find Device","Json":{"description":"Find Device","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5017,"Name":"Device Settings","Json":{"description":null,"columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5063,"Name":"Voice Prompt Volume","Json":{"description":"Voice Prompt Volume","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5064,"Name":"Mic Volume","Json":{"description":"Mic Volume","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5065,"Name":"Ring Tone Volume","Json":{"description":"Ring Tone Volume","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5066,"Name":"Do Not Disturb","Json":{"description":"Do Not Disturb","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5067,"Name":"Phone Settings","Json":{"description":"Phone Settings","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5071,"Name":"Speaker Volume","Json":{"description":"Speaker Volume","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5019,"Name":"Speed Dial Button Settings","Json":{"description":"Speed Dial / Set Contact 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5027,"Name":"Beacon List","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":5039,"Name":"Set Beacon 10","Json":{"description":"Set Beacon 10","columns":1,"order":10,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5043,"Name":"Set Beacon 1","Json":{"description":"Set Beacon 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5044,"Name":"Set Beacon 2","Json":{"description":"Set Beacon 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5045,"Name":"Set Beacon 3","Json":{"description":"Set Beacon 3","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5046,"Name":"Set Beacon 4","Json":{"description":"Set Beacon 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5047,"Name":"Set Beacon 5","Json":{"description":"Set Beacon 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5048,"Name":"Set Beacon 7","Json":{"description":"Set Beacon 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5049,"Name":"Set Beacon 8","Json":{"description":"Set Beacon 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5050,"Name":"Set Beacon 9","Json":{"description":"Set Beacon 9","columns":1,"order":9,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5052,"Name":"Set Beacon 6","Json":{"description":"Set Beacon 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":5028,"Name":"Welfare Check","Json":{"description":"Welfare Check (Only Rio)","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":[{"Id":5055,"Name":"White List Number 6","Json":{"description":"White List Number 6","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5056,"Name":"White List Number 8","Json":{"description":"White List Number 8","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5057,"Name":"White List Number 7","Json":{"description":"White List Number 7","columns":1,"order":7,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5058,"Name":"White List Number 5","Json":{"description":"White List Number 5","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5059,"Name":"White List Number 2","Json":{"description":"White List Number 2","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5060,"Name":"White List Number 1","Json":{"description":"White List Number 1","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5061,"Name":"White List Number 4","Json":{"description":"White List Number 4","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Name","Json":"{\"name\":\"Name\",\"default\":\"\",\"description\":\"Contact Name\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":8,\"helpText\":\"Insert Contact Name\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8640,"Group":{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Heart Rate Monitor","Json":"{\"name\":\"Enable Disable Heart Rate Monitor\",\"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\":\"Enable/Disable Heart Rate Monitor\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":8640,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Disable Heart Rate Monitor\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable Heart Rate Monitor\\\",\\\"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\\\":\\\"Enable/Disable Heart Rate Monitor\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507749},{"Type":0,"NewValue":"{\"Id\":8640,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Disable Heart Rate Monitor\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable Heart Rate Monitor\\\",\\\"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\\\":\\\"Enable/Disable Heart Rate Monitor\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":3498,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.4\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Heart Rate Detecting Interval\",\"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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '05';\\n totalLenght = '0400';\\n}\\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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":25,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507754},{"Type":1,"NewValue":"{\"Id\":8640,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Disable Heart Rate Monitor\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable Heart Rate Monitor\\\",\\\"default\\\":\\\"false\\\",\\\"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\\\":\\\"Enable/Disable Heart Rate Monitor\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707985883},{"Type":0,"NewValue":"{\"Id\":8640,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Disable Heart Rate Monitor\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable Heart Rate Monitor\\\",\\\"default\\\":\\\"false\\\",\\\"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\\\":\\\"Enable/Disable Heart Rate Monitor\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":{\"Id\":3960,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.7\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 00 12 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) \\r\\nvar messageBody = '0211360000';\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707985888}],"LanguageId":null,"Tags":[]},{"Id":8640,"Group":{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Heart Rate Monitor","Json":"{\"name\":\"Enable Disable Heart Rate Monitor\",\"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\":\"Enable/Disable Heart Rate Monitor\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":{"Id":3498,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.4","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Heart Rate Detecting Interval","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';\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\nif (params.DeviceVersion.DeviceVersion == '1') {\n command = '02';\n keyLength = '02';\n key = '11';\n heartBeat = '05';\n totalLenght = '0400';\n}\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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":25,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8641,"Group":{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Heart Rate Detecting Interval","Json":"{\"name\":\"Heart Rate Detecting Interval\",\"default\":\"\",\"description\":null,\"type\":\"number\",\"suffix\":\"min\",\"prefix\":null,\"min\":1,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Insert detecting interval for heart rate monitoring in minutes\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":8641,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Detecting Interval\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Detecting Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"min\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert detecting interval for heart rate monitoring in minutes\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507804},{"Type":0,"NewValue":"{\"Id\":8641,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Detecting Interval\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Detecting Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"min\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert detecting interval for heart rate monitoring in minutes\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":3498,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.4\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Heart Rate Detecting Interval\",\"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';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '05';\\n totalLenght = '0400';\\n}\\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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":25,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507810},{"Type":1,"NewValue":"{\"Id\":8641,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Detecting Interval\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Detecting Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"min\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert detecting interval for heart rate monitoring in minutes\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707985910},{"Type":0,"NewValue":"{\"Id\":8641,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Detecting Interval\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Detecting Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"min\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert detecting interval for heart rate monitoring in minutes\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":3960,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.7\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 00 12 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) \\r\\nvar messageBody = '0211360000';\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707985915}],"LanguageId":null,"Tags":[]},{"Id":8641,"Group":{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Heart Rate Detecting Interval","Json":"{\"name\":\"Heart Rate Detecting Interval\",\"default\":\"\",\"description\":null,\"type\":\"number\",\"suffix\":\"min\",\"prefix\":null,\"min\":1,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Insert detecting interval for heart rate monitoring in minutes\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":3498,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.4","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Heart Rate Detecting Interval","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';\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\nif (params.DeviceVersion.DeviceVersion == '1') {\n command = '02';\n keyLength = '02';\n key = '11';\n heartBeat = '05';\n totalLenght = '0400';\n}\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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":25,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8642,"Group":{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Step Counting","Json":"{\"name\":\"Enable Disable Step Counting\",\"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\":\"Enable/Disable Step Counting\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":8642,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Disable Step Counting\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable Step Counting\\\",\\\"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\\\":\\\"Enable/Disable Step Counting\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507929},{"Type":0,"NewValue":"{\"Id\":8642,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Disable Step Counting\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable Step Counting\\\",\\\"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\\\":\\\"Enable/Disable Step Counting\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":3499,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.4\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '05';\\n totalLenght = '0400';\\n}\\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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":25,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507935},{"Type":1,"NewValue":"{\"Id\":8642,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"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 Step Counting\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable Step Counting\\\",\\\"default\\\":\\\"false\\\",\\\"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\\\":\\\"Enable/Disable Step Counting\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707985928},{"Type":0,"NewValue":"{\"Id\":8642,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"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 Step Counting\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable Step Counting\\\",\\\"default\\\":\\\"false\\\",\\\"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\\\":\\\"Enable/Disable Step Counting\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":{\"Id\":3960,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.7\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 00 12 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) \\r\\nvar messageBody = '0211360000';\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707985935}],"LanguageId":null,"Tags":[]},{"Id":8642,"Group":{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Step Counting","Json":"{\"name\":\"Enable Disable Step Counting\",\"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\":\"Enable/Disable Step Counting\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":{"Id":3499,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.4","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Step Collect Settings","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 totalLenght = '0700';\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\nif (params.DeviceVersion.DeviceVersion == '1') {\n command = '02';\n keyLength = '02';\n key = '11';\n heartBeat = '05';\n totalLenght = '0400';\n}\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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":25,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8643,"Group":{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Step Counting Interval","Json":"{\"name\":\"Step Counting Interval\",\"default\":\"\",\"description\":null,\"type\":\"number\",\"suffix\":\"min\",\"prefix\":null,\"min\":1,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Insert step counting interval in minutes\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":8643,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Interval\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"min\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert step counting interval in minutes\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507992},{"Type":0,"NewValue":"{\"Id\":8643,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Interval\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"min\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert step counting interval in minutes\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":3499,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.4\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Step Collect Settings\",\"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 totalLenght = '0700';\\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\\nif (params.DeviceVersion.DeviceVersion == '1') {\\n command = '02';\\n keyLength = '02';\\n key = '11';\\n heartBeat = '05';\\n totalLenght = '0400';\\n}\\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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":25,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694507997},{"Type":1,"NewValue":"{\"Id\":8643,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Interval\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"min\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert step counting interval in minutes\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707985951},{"Type":0,"NewValue":"{\"Id\":8643,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Interval\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Interval\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"number\\\",\\\"suffix\\\":\\\"min\\\",\\\"prefix\\\":null,\\\"min\\\":1,\\\"max\\\":1440,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert step counting interval in minutes\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":3960,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.7\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 00 12 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) \\r\\nvar messageBody = '0211360000';\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1707985957}],"LanguageId":null,"Tags":[]},{"Id":8643,"Group":{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Step Counting Interval","Json":"{\"name\":\"Step Counting Interval\",\"default\":\"\",\"description\":null,\"type\":\"number\",\"suffix\":\"min\",\"prefix\":null,\"min\":1,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Insert step counting interval in minutes\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":3499,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.4","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Step Collect Settings","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 totalLenght = '0700';\n// Only for OystaCareWatch. send a dummy msg (microphone volume to 10)\nif (params.DeviceVersion.DeviceVersion == '1') {\n command = '02';\n keyLength = '02';\n key = '11';\n heartBeat = '05';\n totalLenght = '0400';\n}\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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":25,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8644,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Enable Control","Json":"{\"name\":\"Enable Disable Enable Control\",\"default\":\"\",\"description\":\"Enable Step Counting\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enables/Disables step counting function\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":8644,\"Group\":{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Disable Enable Control\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable Enable Control\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable Step Counting\\\",\\\"type\\\":\\\"enable\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enables/Disables step counting function\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694508203},{"Type":0,"NewValue":"{\"Id\":8644,\"Group\":{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":12,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Disable Enable Control\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable Enable Control\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable Step Counting\\\",\\\"type\\\":\\\"enable\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enables/Disables step counting function\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":3295,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.4\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Enable Control\",\"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}\\n// activity fuction, step counting, home-wifi location, data-saver, NLprovider, power control,\\n// sos cancel switch, Long SMS, plus 7 more without functions\\nvalue += '000000';\\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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":25,\"Order\":5},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694508209}],"LanguageId":null,"Tags":[]},{"Id":8644,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":12,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Enable Control","Json":"{\"name\":\"Enable Disable Enable Control\",\"default\":\"\",\"description\":\"Enable Step Counting\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enables/Disables step counting function\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":{"Id":3295,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.4","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Enable Control","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}\n// activity fuction, step counting, home-wifi location, data-saver, NLprovider, power control,\n// sos cancel switch, Long SMS, plus 7 more without functions\nvalue += '000000';\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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":25,"Order":5},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8736,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Step","Json":"{\"name\":\"Step\",\"default\":\"\",\"description\":\"Enable Step Counting\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enables/Disables steps counting function\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":8736,\"Group\":{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step\",\"Json\":\"{\\\"name\\\":\\\"Step\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable Step Counting\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enables/Disables steps counting function\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694716249},{"Type":0,"NewValue":"{\"Id\":8736,\"Group\":{\"Id\":5029,\"Name\":\"Enable Control\",\"Json\":{\"description\":\"Enable Control\",\"columns\":1,\"order\":11,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step\",\"Json\":\"{\\\"name\\\":\\\"Step\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable Step Counting\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enables/Disables steps counting function\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":3295,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.4\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Enable Control\",\"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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":35,\"Order\":5},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1694716254}],"LanguageId":null,"Tags":[]},{"Id":8736,"Group":{"Id":5029,"Name":"Enable Control","Json":{"description":"Enable Control","columns":1,"order":11,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Step","Json":"{\"name\":\"Step\",\"default\":\"\",\"description\":\"Enable Step Counting\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enables/Disables steps counting function\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":{"Id":3295,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.4","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Enable Control","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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":35,"Order":5},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9201,"Group":{"Id":5420,"Name":"WiFi Connect","Json":{"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":"Enable Disable WiFi Connect","Json":"{\"name\":\"Enable Disable WiFi Connect\",\"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":[{"Type":0,"NewValue":"{\"Id\":9201,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"Enable Disable WiFi Connect\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable WiFi Connect\\\",\\\"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\":[],\"Tags\":[]}","Timestamp":1706035083},{"Type":1,"NewValue":"{\"Id\":9201,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"Enable Disable WiFi Connect\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable WiFi Connect\\\",\\\"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\":[],\"Tags\":[]}","Timestamp":1706035435},{"Type":1,"NewValue":"{\"Id\":9201,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"Enable Disable WiFi Connect\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable WiFi Connect\\\",\\\"default\\\":\\\"false\\\",\\\"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\":[],\"Tags\":[]}","Timestamp":1706037499},{"Type":0,"NewValue":"{\"Id\":9201,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"Enable Disable WiFi Connect\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable WiFi Connect\\\",\\\"default\\\":\\\"false\\\",\\\"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\":{\"Id\":3805,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.7\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set WiFi Connect\",\"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 msg = [];\\r\\nvar configs = [];\\r\\n//var 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.WiFiConnect.EnableDisableWiFiConnect == 'true') {\\r\\n if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase();\\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":6,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706037506},{"Type":1,"NewValue":"{\"Id\":9201,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"Enable Disable WiFi Connect\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable WiFi Connect\\\",\\\"default\\\":\\\"false\\\",\\\"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\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706344873},{"Type":1,"NewValue":"{\"Id\":9201,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"Enable Disable WiFi Connect\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable WiFi Connect\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Enable Disable WiFi Connect\\\",\\\"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\":[],\"Tags\":[]}","Timestamp":1706345588},{"Type":1,"NewValue":"{\"Id\":9201,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"Enable Disable WiFi Connect\",\"Json\":\"{\\\"name\\\":\\\"Enable Disable WiFi Connect\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Enable Disable WiFi Connect\\\",\\\"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\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706345599}],"LanguageId":null,"Tags":[]},{"Id":9202,"Group":{"Id":5420,"Name":"WiFi Connect","Json":{"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":"SSID","Json":"{\"name\":\"SSID\",\"default\":\"\",\"description\":null,\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9202,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"SSID\",\"Json\":\"{\\\"name\\\":\\\"SSID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706035167},{"Type":1,"NewValue":"{\"Id\":9202,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"SSID\",\"Json\":\"{\\\"name\\\":\\\"SSID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706035440},{"Type":1,"NewValue":"{\"Id\":9202,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"SSID\",\"Json\":\"{\\\"name\\\":\\\"SSID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706037524},{"Type":0,"NewValue":"{\"Id\":9202,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"SSID\",\"Json\":\"{\\\"name\\\":\\\"SSID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":3805,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.7\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set WiFi Connect\",\"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 msg = [];\\r\\nvar configs = [];\\r\\n//var 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.WiFiConnect.EnableDisableWiFiConnect == 'true') {\\r\\n if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase();\\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":6,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706037536},{"Type":1,"NewValue":"{\"Id\":9202,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"SSID\",\"Json\":\"{\\\"name\\\":\\\"SSID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706344878},{"Type":1,"NewValue":"{\"Id\":9202,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"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\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert SSID name of the WiFi Network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706344967},{"Type":1,"NewValue":"{\"Id\":9202,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"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\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert SSID name of the WiFi Network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706345604},{"Type":1,"NewValue":"{\"Id\":9202,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"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\\\":null,\\\"helpText\\\":\\\"Insert SSID name of the WiFi Network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706345663},{"Type":1,"NewValue":"{\"Id\":9202,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"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\\\":null,\\\"helpText\\\":\\\"Insert SSID name of the WiFi Network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706345702},{"Type":1,"NewValue":"{\"Id\":9202,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"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\":\"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\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert SSID name of the WiFi Network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706618108}],"LanguageId":null,"Tags":[]},{"Id":9203,"Group":{"Id":5420,"Name":"WiFi Connect","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Password","Json":"{\"name\":\"Password\",\"default\":\"\",\"description\":null,\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9203,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706035231},{"Type":1,"NewValue":"{\"Id\":9203,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":2}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706035446},{"Type":1,"NewValue":"{\"Id\":9203,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706037562},{"Type":0,"NewValue":"{\"Id\":9203,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":3805,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.7\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set WiFi Connect\",\"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 msg = [];\\r\\nvar configs = [];\\r\\n//var 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.WiFiConnect.EnableDisableWiFiConnect == 'true') {\\r\\n if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase();\\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":6,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706037567},{"Type":1,"NewValue":"{\"Id\":9203,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":2}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706344897},{"Type":1,"NewValue":"{\"Id\":9203,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Password\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert password of the WiFi Network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706345031},{"Type":1,"NewValue":"{\"Id\":9203,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Password\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert password of the WiFi Network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":2}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706345610},{"Type":1,"NewValue":"{\"Id\":9203,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Password\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":1,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert password of the WiFi Network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706345679},{"Type":1,"NewValue":"{\"Id\":9203,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Password\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":1,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert password of the WiFi Network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":2}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706345708},{"Type":1,"NewValue":"{\"Id\":9203,\"Group\":{\"Id\":5420,\"Name\":\"WiFi Connect\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Password\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Insert password of the WiFi Network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1706618124}],"LanguageId":null,"Tags":[]},{"Id":9201,"Group":{"Id":5420,"Name":"WiFi Connect","Json":{"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":"Enable Disable WiFi Connect","Json":"{\"name\":\"Enable Disable WiFi Connect\",\"default\":\"false\",\"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":{"Id":3805,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.7","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set WiFi Connect","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 msg = [];\r\nvar configs = [];\r\n//var 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.WiFiConnect.EnableDisableWiFiConnect == 'true') {\r\n if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase();\r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":6,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9202,"Group":{"Id":5420,"Name":"WiFi Connect","Json":{"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":"SSID","Json":"{\"name\":\"SSID\",\"default\":\"\",\"description\":null,\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":3805,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.7","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set WiFi Connect","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 msg = [];\r\nvar configs = [];\r\n//var 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.WiFiConnect.EnableDisableWiFiConnect == 'true') {\r\n if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase();\r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":6,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9203,"Group":{"Id":5420,"Name":"WiFi Connect","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Password","Json":"{\"name\":\"Password\",\"default\":\"\",\"description\":null,\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":3805,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.7","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set WiFi Connect","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 msg = [];\r\nvar configs = [];\r\n//var 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.WiFiConnect.EnableDisableWiFiConnect == 'true') {\r\n if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase();\r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":6,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8640,"Group":{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Heart Rate Monitor","Json":"{\"name\":\"Enable Disable Heart Rate Monitor\",\"default\":\"false\",\"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\":\"Enable/Disable Heart Rate Monitor\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":{"Id":3960,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.7","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set Watch Settings","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 Watch Settings' Only enable y disable:\r\n// params.StepCounting.EnableDisableStepCounting == 'true'\r\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\r\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\r\n// Test enabled both\r\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\r\n// test step on HRT off\r\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test step off HRT on\r\n// 02 11 36 00 00 12 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test both off \r\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) \r\nvar messageBody = '0211360000';\r\n// Watch setting related to Step and heart rate settings\r\nvar dataSMS = '';\r\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1A00003E00000014000000000000';\r\n /* if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0A00003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1200003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0200003800000014000000000000';\r\n} else {\r\n messageBody += '0200003800000014000000000000';\r\n}\r\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\r\nif (params.DeviceVersion.DeviceVersion == '1') {\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n heartBeat = '0A';\r\n totalLenght = '0400';\r\n messageBody = command + keyLength + key + heartBeat;\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":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8641,"Group":{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Heart Rate Detecting Interval","Json":"{\"name\":\"Heart Rate Detecting Interval\",\"default\":\"\",\"description\":null,\"type\":\"number\",\"suffix\":\"min\",\"prefix\":null,\"min\":1,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Insert detecting interval for heart rate monitoring in minutes\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":3960,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.7","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set Watch Settings","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 Watch Settings' Only enable y disable:\r\n// params.StepCounting.EnableDisableStepCounting == 'true'\r\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\r\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\r\n// Test enabled both\r\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\r\n// test step on HRT off\r\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test step off HRT on\r\n// 02 11 36 00 00 12 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test both off \r\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) \r\nvar messageBody = '0211360000';\r\n// Watch setting related to Step and heart rate settings\r\nvar dataSMS = '';\r\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1A00003E00000014000000000000';\r\n /* if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0A00003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1200003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0200003800000014000000000000';\r\n} else {\r\n messageBody += '0200003800000014000000000000';\r\n}\r\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\r\nif (params.DeviceVersion.DeviceVersion == '1') {\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n heartBeat = '0A';\r\n totalLenght = '0400';\r\n messageBody = command + keyLength + key + heartBeat;\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":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8642,"Group":{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","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 Step Counting","Json":"{\"name\":\"Enable Disable Step Counting\",\"default\":\"false\",\"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\":\"Enable/Disable Step Counting\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":{"Id":3960,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.7","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set Watch Settings","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 Watch Settings' Only enable y disable:\r\n// params.StepCounting.EnableDisableStepCounting == 'true'\r\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\r\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\r\n// Test enabled both\r\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\r\n// test step on HRT off\r\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test step off HRT on\r\n// 02 11 36 00 00 12 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test both off \r\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) \r\nvar messageBody = '0211360000';\r\n// Watch setting related to Step and heart rate settings\r\nvar dataSMS = '';\r\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1A00003E00000014000000000000';\r\n /* if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0A00003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1200003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0200003800000014000000000000';\r\n} else {\r\n messageBody += '0200003800000014000000000000';\r\n}\r\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\r\nif (params.DeviceVersion.DeviceVersion == '1') {\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n heartBeat = '0A';\r\n totalLenght = '0400';\r\n messageBody = command + keyLength + key + heartBeat;\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":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8643,"Group":{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Step Counting Interval","Json":"{\"name\":\"Step Counting Interval\",\"default\":\"\",\"description\":null,\"type\":\"number\",\"suffix\":\"min\",\"prefix\":null,\"min\":1,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Insert step counting interval in minutes\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":3960,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.7","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set Watch Settings","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 Watch Settings' Only enable y disable:\r\n// params.StepCounting.EnableDisableStepCounting == 'true'\r\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\r\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\r\n// Test enabled both\r\n// AB 10 13 00 40 6F 00 00 02 11 36 00 00 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\r\n// test step on HRT off\r\n// 02 11 36 00 00 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test step off HRT on\r\n// 02 11 36 00 00 12 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test both off \r\n// 02 11 36 00 00 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) \r\nvar messageBody = '0211360000';\r\n// Watch setting related to Step and heart rate settings\r\nvar dataSMS = '';\r\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1A00003E00000014000000000000';\r\n /* if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0A00003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1200003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0200003800000014000000000000';\r\n} else {\r\n messageBody += '0200003800000014000000000000';\r\n}\r\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\r\nif (params.DeviceVersion.DeviceVersion == '1') {\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n heartBeat = '0A';\r\n totalLenght = '0400';\r\n messageBody = command + keyLength + key + heartBeat;\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":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9429,"Group":{"Id":5522,"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":[]},"Name":"Configuration Mode","Json":"{\"name\":\"Configuration Mode\",\"default\":\"\",\"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\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9429,\"Group\":{\"Id\":5522,\"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\":[]},\"Name\":\"Configuration Mode\",\"Json\":\"{\\\"name\\\":\\\"Configuration Mode\\\",\\\"default\\\":\\\"\\\",\\\"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\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1708016984},{"Type":0,"NewValue":"{\"Id\":9429,\"Group\":{\"Id\":5522,\"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\":[]},\"Name\":\"Configuration Mode\",\"Json\":\"{\\\"name\\\":\\\"Configuration Mode\\\",\\\"default\\\":\\\"\\\",\\\"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\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":3963,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.7\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Control Configuration Mode\",\"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`;\\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},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1708016992},{"Type":1,"NewValue":"{\"Id\":9429,\"Group\":{\"Id\":5522,\"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\":[]},\"Name\":\"Configuration Mode\",\"Json\":\"{\\\"name\\\":\\\"Configuration Mode\\\",\\\"default\\\":\\\"\\\",\\\"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\\\":0}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718618526}],"LanguageId":null,"Tags":[]},{"Id":9429,"Group":{"Id":5522,"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":[]},"Name":"Configuration Mode","Json":"{\"name\":\"Configuration Mode\",\"default\":\"\",\"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\"]}","Default":"false","Command":{"Id":3963,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.7","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Control Configuration Mode","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`;\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},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9626,"Group":{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Heart Rate Watch Face","Json":"{\"name\":\"Heart Rate Watch Face\",\"default\":\"\",\"description\":null,\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9626,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709751249},{"Type":0,"NewValue":"{\"Id\":9626,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":3960,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.8\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) \\r\\nvar messageBody = '0211360008'; // step count/heart value display\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003A00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709751289},{"Type":1,"NewValue":"{\"Id\":9626,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Watch Face\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":null,\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enable/Disable Heart Rate Watch Face\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709751323},{"Type":2,"NewValue":"{\"Id\":9626,\"Group\":{\"Id\":5173,\"Name\":\"Heart Rate Monitor\",\"Json\":{\"description\":\"Heart Rate Monitor (Only Watch)\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Watch Face\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":null,\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enable/Disable Heart Rate Watch Face\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710351065}],"LanguageId":null,"Tags":[]},{"Id":9626,"Group":{"Id":5173,"Name":"Heart Rate Monitor","Json":{"description":"Heart Rate Monitor (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Heart Rate Watch Face","Json":"{\"name\":\"Heart Rate Watch Face\",\"default\":\"\",\"description\":null,\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":{"Id":3960,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.8","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set Watch Settings","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 Watch Settings' Only enable y disable:\r\n// params.StepCounting.EnableDisableStepCounting == 'true'\r\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\r\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\r\n// Test enabled both\r\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\r\n// test step on HRT off\r\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test step off HRT on\r\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\r\n// test both off \r\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) \r\nvar messageBody = '0211360008'; // step count/heart value display\r\n// Watch setting related to Step and heart rate settings\r\nvar dataSMS = '';\r\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1A00003E00000014000000000000';\r\n /* if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0A00003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1200003A00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0200003800000014000000000000';\r\n} else {\r\n messageBody += '0200003800000014000000000000';\r\n}\r\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\r\nif (params.DeviceVersion.DeviceVersion == '1') {\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n heartBeat = '0A';\r\n totalLenght = '0400';\r\n messageBody = command + keyLength + key + heartBeat;\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":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9627,"Group":{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Step Counting Watch Face","Json":"{\"name\":\"Step Counting Watch Face\",\"default\":\"\",\"description\":null,\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable/Disable Step Counting Watch Face\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9627,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enable/Disable Step Counting Watch Face\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709751421},{"Type":0,"NewValue":"{\"Id\":9627,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enable/Disable Step Counting Watch Face\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":3960,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.8\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) \\r\\nvar messageBody = '0211360008'; // step count/heart value display\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003A00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709751462},{"Type":2,"NewValue":"{\"Id\":9627,\"Group\":{\"Id\":5180,\"Name\":\"Step Counting\",\"Json\":{\"description\":\"Step Counting (Only Watch)\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enable/Disable Step Counting Watch Face\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710351153}],"LanguageId":null,"Tags":[]},{"Id":9627,"Group":{"Id":5180,"Name":"Step Counting","Json":{"description":"Step Counting (Only Watch)","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Step Counting Watch Face","Json":"{\"name\":\"Step Counting Watch Face\",\"default\":\"\",\"description\":null,\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable/Disable Step Counting Watch Face\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":{"Id":3960,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.8","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set Watch Settings","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 Watch Settings' Only enable y disable:\r\n// params.StepCounting.EnableDisableStepCounting == 'true'\r\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\r\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\r\n// Test enabled both\r\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\r\n// test step on HRT off\r\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test step off HRT on\r\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\r\n// test both off \r\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) \r\nvar messageBody = '0211360008'; // step count/heart value display\r\n// Watch setting related to Step and heart rate settings\r\nvar dataSMS = '';\r\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1A00003E00000014000000000000';\r\n /* if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0A00003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1200003A00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0200003800000014000000000000';\r\n} else {\r\n messageBody += '0200003800000014000000000000';\r\n}\r\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\r\nif (params.DeviceVersion.DeviceVersion == '1') {\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n heartBeat = '0A';\r\n totalLenght = '0400';\r\n messageBody = command + keyLength + key + heartBeat;\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":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9628,"Group":{"Id":5605,"Name":"Watch Face","Json":{"description":"Watch Face (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Set Watch Face","Json":"{\"name\":\"Set Watch Face\",\"default\":\"\",\"description\":\"Select Watch Face\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Select Watch Face (Analog or Digital)\",\"options\":[{\"label\":\"Analog Dial 1\",\"value\":\"00\"},{\"label\":\"Digital Dial 1\",\"value\":\"01\"},{\"label\":\"Analog Dial 2\",\"value\":\"02\"},{\"label\":\"Digital Dial 2\",\"value\":\"03\"},{\"label\":\"Digital Dial 3\",\"value\":\"04\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9628,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Set Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Set Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Select Watch Face\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select Watch Face (Analog or Digital)\\\",\\\"options\\\":[{\\\"label\\\":\\\"Analog Dial 1\\\",\\\"value\\\":\\\"00\\\"},{\\\"label\\\":\\\"Digital Dial 1\\\",\\\"value\\\":\\\"01\\\"},{\\\"label\\\":\\\"Analog Dial 2\\\",\\\"value\\\":\\\"02\\\"},{\\\"label\\\":\\\"Digital Dial 2\\\",\\\"value\\\":\\\"03\\\"},{\\\"label\\\":\\\"Digital Dial 3\\\",\\\"value\\\":\\\"04\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709836470},{"Type":0,"NewValue":"{\"Id\":9628,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Set Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Set Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Select Watch Face\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select Watch Face (Analog or Digital)\\\",\\\"options\\\":[{\\\"label\\\":\\\"Analog Dial 1\\\",\\\"value\\\":\\\"00\\\"},{\\\"label\\\":\\\"Digital Dial 1\\\",\\\"value\\\":\\\"01\\\"},{\\\"label\\\":\\\"Analog Dial 2\\\",\\\"value\\\":\\\"02\\\"},{\\\"label\\\":\\\"Digital Dial 2\\\",\\\"value\\\":\\\"03\\\"},{\\\"label\\\":\\\"Digital Dial 3\\\",\\\"value\\\":\\\"04\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":3960,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.8\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) , lenght and key\\r\\nvar messageBody = '021136';\\r\\n// step count/heart value display\\r\\n// Watch setting related FACE ID\\r\\nswitch (params.HeartRateMonitor.WatchFace) {\\r\\n case x:\\r\\n // code block\\r\\n break;\\r\\n case y:\\r\\n // code block\\r\\n break;\\r\\n default:\\r\\n // code block\\r\\n}\\r\\nif (params.HeartRateMonitor.HeartRateWatchFace == 'true') {\\r\\n messageBody += '0108'; // Face ID 1 \\r\\n} else if (params.StepCounting.StepCountingWatchFace == 'true') {\\r\\n messageBody += '0208'; // Face ID 2\\r\\n} else {\\r\\n messageBody += '0008';\\r\\n} // Default Face ID 0\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n /* if (params.WiFiConnect.SSID) {\\r\\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \\r\\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\\r\\n }\\r\\n if (params.WiFiConnect.Password) {\\r\\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\\r\\n messageBody += '1200003A00000014000000000000';\\r\\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709836476},{"Type":1,"NewValue":"{\"Id\":9628,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Set Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Set Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Select Watch Face\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select Watch Face (Analog or Digital)\\\",\\\"options\\\":[{\\\"label\\\":\\\"Analog Dial 1\\\",\\\"value\\\":\\\"00\\\"},{\\\"label\\\":\\\"Digital Dial 1\\\",\\\"value\\\":\\\"01\\\"},{\\\"label\\\":\\\"Analog Dial 2\\\",\\\"value\\\":\\\"02\\\"},{\\\"label\\\":\\\"Digital Dial 2\\\",\\\"value\\\":\\\"03\\\"},{\\\"label\\\":\\\"Digital Dial 3\\\",\\\"value\\\":\\\"04\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"],\\\"order\\\":0}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709837495}],"LanguageId":null,"Tags":[]},{"Id":9628,"Group":{"Id":5605,"Name":"Watch Face","Json":{"description":"Watch Face (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Set Watch Face","Json":"{\"name\":\"Set Watch Face\",\"default\":\"\",\"description\":\"Select Watch Face\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Select Watch Face (Analog or Digital)\",\"options\":[{\"label\":\"Analog Dial 1\",\"value\":\"00\"},{\"label\":\"Digital Dial 1\",\"value\":\"01\"},{\"label\":\"Analog Dial 2\",\"value\":\"02\"},{\"label\":\"Digital Dial 2\",\"value\":\"03\"},{\"label\":\"Digital Dial 3\",\"value\":\"04\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":{"Id":3960,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.8","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set Watch Settings","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 Watch Settings' Only enable y disable:\r\n// params.StepCounting.EnableDisableStepCounting == 'true'\r\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\r\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\r\n// Test enabled both\r\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\r\n// test step on HRT off\r\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test step off HRT on\r\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\r\n// test both off \r\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) , lenght and key\r\nvar messageBody = '021136';\r\n// step count/heart value display\r\n// Watch setting related FACE ID\r\nswitch (params.HeartRateMonitor.WatchFace) {\r\n case x:\r\n // code block\r\n break;\r\n case y:\r\n // code block\r\n break;\r\n default:\r\n // code block\r\n}\r\nif (params.HeartRateMonitor.HeartRateWatchFace == 'true') {\r\n messageBody += '0108'; // Face ID 1 \r\n} else if (params.StepCounting.StepCountingWatchFace == 'true') {\r\n messageBody += '0208'; // Face ID 2\r\n} else {\r\n messageBody += '0008';\r\n} // Default Face ID 0\r\n// Watch setting related to Step and heart rate settings\r\nvar dataSMS = '';\r\nif ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1A00003E00000014000000000000';\r\n /* if (params.WiFiConnect.SSID) {\r\n network = ascii_to_hexa(params.WiFiConnect.SSID).toUpperCase(); \r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiConnect.Password) {\r\n pass = ascii_to_hexa(params.WiFiConnect.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 if ((params.StepCounting.EnableDisableStepCounting == 'true') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0A00003C00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true')) {\r\n messageBody += '1200003A00000014000000000000';\r\n} else if ((params.StepCounting.EnableDisableStepCounting == 'false') && (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'false')) {\r\n messageBody += '0200003800000014000000000000';\r\n} else {\r\n messageBody += '0200003800000014000000000000';\r\n}\r\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\r\nif (params.DeviceVersion.DeviceVersion == '1') {\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n heartBeat = '0A';\r\n totalLenght = '0400';\r\n messageBody = command + keyLength + key + heartBeat;\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":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9629,"Group":{"Id":5605,"Name":"Watch Face","Json":{"description":"Watch Face (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Heart Rate Watch Face","Json":"{\"name\":\"Heart Rate Watch Face\",\"default\":\"\",\"description\":\"Enable/Disable Heart Rate Watch Face\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9629,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable/Disable Heart Rate Watch Face\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709837461},{"Type":0,"NewValue":"{\"Id\":9629,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable/Disable Heart Rate Watch Face\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":3960,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.8\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) , lenght and key\\r\\nvar messageBody = '021136';\\r\\n// step count/heart value display\\r\\n// Watch setting related FACE ID\\r\\nif (params.WatchFace.SetWatchFace) {\\r\\n messageBody += params.WatchFace.SetWatchFace; // Face ID \\r\\n} else {\\r\\n messageBody += '00'; // Analog Face Default FACE ID 0 \\r\\n}\\r\\n/*\\r\\nif (params.HeartRateMonitor.HeartRateWatchFace == 'true') {\\r\\n messageBody += '0108'; // Face ID 1 \\r\\n} else if (params.StepCounting.StepCountingWatchFace == 'true') {\\r\\n messageBody += '0208'; // Face ID 2\\r\\n} else {\\r\\n messageBody += '0008';\\r\\n} // Default Face ID 0\\r\\n*/\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '1200003A00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709837469},{"Type":1,"NewValue":"{\"Id\":9629,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable/Disable Heart Rate Watch Face\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709837499},{"Type":1,"NewValue":"{\"Id\":9629,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Watch Face\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable/Disable Heart Rate Watch Menu\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710182685},{"Type":1,"NewValue":"{\"Id\":9629,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Heart Rate Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Heart Rate Watch Face\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable/Disable Heart Rate Watch Menu\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710184165}],"LanguageId":null,"Tags":[]},{"Id":9629,"Group":{"Id":5605,"Name":"Watch Face","Json":{"description":"Watch Face (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Heart Rate Watch Face","Json":"{\"name\":\"Heart Rate Watch Face\",\"default\":\"\",\"description\":\"Enable/Disable Heart Rate Watch Face\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":{"Id":3960,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.8","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set Watch Settings","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 Watch Settings' Only enable y disable:\r\n// params.StepCounting.EnableDisableStepCounting == 'true'\r\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\r\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\r\n// Test enabled both\r\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\r\n// test step on HRT off\r\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test step off HRT on\r\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\r\n// test both off \r\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) , lenght and key\r\nvar messageBody = '021136';\r\n// step count/heart value display\r\n// Watch setting related FACE ID\r\nif (params.WatchFace.SetWatchFace) {\r\n messageBody += params.WatchFace.SetWatchFace; // Face ID \r\n} else {\r\n messageBody += '00'; // Analog Face Default FACE ID 0 \r\n}\r\n/*\r\nif (params.HeartRateMonitor.HeartRateWatchFace == 'true') {\r\n messageBody += '0108'; // Face ID 1 \r\n} else if (params.StepCounting.StepCountingWatchFace == 'true') {\r\n messageBody += '0208'; // Face ID 2\r\n} else {\r\n messageBody += '0008';\r\n} // Default Face ID 0\r\n*/\r\n// Watch setting related to Step and heart rate settings\r\nvar dataSMS = '';\r\nif ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'true')) {\r\n messageBody += '1A00003E00000014000000000000';\r\n} else if ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'false')) {\r\n messageBody += '0A00003C00000014000000000000';\r\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'true')) {\r\n messageBody += '1200003A00000014000000000000';\r\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'false')) {\r\n messageBody += '0200003800000014000000000000';\r\n} else {\r\n messageBody += '0200003800000014000000000000';\r\n}\r\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\r\nif (params.DeviceVersion.DeviceVersion == '1') {\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n heartBeat = '0A';\r\n totalLenght = '0400';\r\n messageBody = command + keyLength + key + heartBeat;\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":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9630,"Group":{"Id":5605,"Name":"Watch Face","Json":{"description":"Watch Face (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Step Counting Watch Face","Json":"{\"name\":\"Step Counting Watch Face\",\"default\":\"\",\"description\":\"Enable/Disable Step Counting Watch Face\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9630,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable/Disable Step Counting Watch Face\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709837549},{"Type":0,"NewValue":"{\"Id\":9630,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Watch Face\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable/Disable Step Counting Watch Face\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":3960,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.8\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set Watch Settings\",\"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 Watch Settings' Only enable y disable:\\r\\n// params.StepCounting.EnableDisableStepCounting == 'true'\\r\\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\\r\\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\\r\\n// Test enabled both\\r\\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\\r\\n// test step on HRT off\\r\\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\\r\\n// test step off HRT on\\r\\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\\r\\n// test both off \\r\\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// configuration command (0X02) , lenght and key\\r\\nvar messageBody = '021136';\\r\\n// step count/heart value display\\r\\n// Watch setting related FACE ID\\r\\nif (params.WatchFace.SetWatchFace) {\\r\\n messageBody += params.WatchFace.SetWatchFace; // Face ID \\r\\n} else {\\r\\n messageBody += '00'; // Analog Face Default FACE ID 0 \\r\\n}\\r\\n/*\\r\\nif (params.HeartRateMonitor.HeartRateWatchFace == 'true') {\\r\\n messageBody += '0108'; // Face ID 1 \\r\\n} else if (params.StepCounting.StepCountingWatchFace == 'true') {\\r\\n messageBody += '0208'; // Face ID 2\\r\\n} else {\\r\\n messageBody += '0008';\\r\\n} // Default Face ID 0\\r\\n*/\\r\\n// Watch setting related to Step and heart rate settings\\r\\nvar dataSMS = '';\\r\\nif ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '1A00003E00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '0A00003C00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'true')) {\\r\\n messageBody += '1200003A00000014000000000000';\\r\\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'false')) {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n} else {\\r\\n messageBody += '0200003800000014000000000000';\\r\\n}\\r\\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\\r\\nif (params.DeviceVersion.DeviceVersion == '1') {\\r\\n command = '02';\\r\\n keyLength = '02';\\r\\n key = '11';\\r\\n heartBeat = '0A';\\r\\n totalLenght = '0400';\\r\\n messageBody = command + keyLength + key + heartBeat;\\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\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1709837554},{"Type":1,"NewValue":"{\"Id\":9630,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Watch Face\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable/Disable Step Counting Watch Menu\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710182706},{"Type":1,"NewValue":"{\"Id\":9630,\"Group\":{\"Id\":5605,\"Name\":\"Watch Face\",\"Json\":{\"description\":\"Watch Face (Only Watch)\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Step Counting Watch Face\",\"Json\":\"{\\\"name\\\":\\\"Step Counting Watch Face\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable/Disable Step Counting Watch Menu\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":2}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710184170}],"LanguageId":null,"Tags":[]},{"Id":9630,"Group":{"Id":5605,"Name":"Watch Face","Json":{"description":"Watch Face (Only Watch)","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Step Counting Watch Face","Json":"{\"name\":\"Step Counting Watch Face\",\"default\":\"\",\"description\":\"Enable/Disable Step Counting Watch Face\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":{"Id":3960,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.8","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set Watch Settings","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 Watch Settings' Only enable y disable:\r\n// params.StepCounting.EnableDisableStepCounting == 'true'\r\n// params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true'\r\n//var params = {StepCounting:{'EnableDisableStepCounting':'true'},HeartRateMonitor:{'EnableDisableHeartRateMonitor':'true'}, DeviceVersion:{'DeviceVersion':2}}\r\n// Test enabled both\r\n// AB 10 13 00 40 6F 00 00 02 11 36 00 08 1A 00 00 3E 00 00 00 14 00 00 00 00 00 00\r\n// test step on HRT off\r\n// 02 11 36 00 08 0A 00 00 3C 00 00 00 14 00 00 00 00 00 00\r\n// test step off HRT on\r\n// 02 11 36 00 08 12 00 00 3A 00 00 00 14 00 00 00 00 00 00\r\n// test both off \r\n// 02 11 36 00 08 02 00 00 38 00 00 00 14 00 00 00 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) , lenght and key\r\nvar messageBody = '021136';\r\n// step count/heart value display\r\n// Watch setting related FACE ID\r\nif (params.WatchFace.SetWatchFace) {\r\n messageBody += params.WatchFace.SetWatchFace; // Face ID \r\n} else {\r\n messageBody += '00'; // Analog Face Default FACE ID 0 \r\n}\r\n/*\r\nif (params.HeartRateMonitor.HeartRateWatchFace == 'true') {\r\n messageBody += '0108'; // Face ID 1 \r\n} else if (params.StepCounting.StepCountingWatchFace == 'true') {\r\n messageBody += '0208'; // Face ID 2\r\n} else {\r\n messageBody += '0008';\r\n} // Default Face ID 0\r\n*/\r\n// Watch setting related to Step and heart rate settings\r\nvar dataSMS = '';\r\nif ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'true')) {\r\n messageBody += '1A00003E00000014000000000000';\r\n} else if ((params.WatchFace.StepCountingWatchFace == 'true') && (params.WatchFace.HeartRateWatchFace == 'false')) {\r\n messageBody += '0A00003C00000014000000000000';\r\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'true')) {\r\n messageBody += '1200003A00000014000000000000';\r\n} else if ((params.WatchFace.StepCountingWatchFace == 'false') && (params.WatchFace.HeartRateWatchFace == 'false')) {\r\n messageBody += '0200003800000014000000000000';\r\n} else {\r\n messageBody += '0200003800000014000000000000';\r\n}\r\n// Only for OystaCareWatch. If it is a Rio, send a dummy msg (microphone volume to 10)\r\nif (params.DeviceVersion.DeviceVersion == '1') {\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n heartBeat = '0A';\r\n totalLenght = '0400';\r\n messageBody = command + keyLength + key + heartBeat;\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":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":8199,"Group":{"Id":5022,"Name":"Update Firmware","Json":{"description":"Over the Air update of device firmware","columns":1,"order":8,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"OTA Update","Json":"{\"name\":\"OTA Update\",\"default\":\"\",\"description\":\"Performs an OTA update\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Sends command to perform OTA update\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":5009,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.8","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"TriggerOTA","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// Trigger OTA\r\nvar 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 value for URL\r\nvar value = 'http://35.180.127.121:5800/fi_ota';\r\nvar value = ascii_to_hexa(value).toUpperCase();\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\n// control command\r\nvar command = '04';\r\nvar keyLength = ('00' + decimalToHex(1 + (value.length / 2))).slice(-2).toUpperCase();\r\nvar key = '30';\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 totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLenght = changeEndianness(totalLenght);\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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11290,"Group":{"Id":5522,"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":[]},"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\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Retrieve the current firmware version from the device\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":11290,\"Group\":{\"Id\":5522,\"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\":[]},\"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\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Retrieve the current firmware version from the device\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718360523},{"Type":0,"NewValue":"{\"Id\":11290,\"Group\":{\"Id\":5522,\"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\":[]},\"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\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Retrieve the current firmware version from the device\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":3307,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"2.8\",\"FirmwareVersion\":null,\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Get Firmware version\",\"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 = '02'; //Ask for firmware\\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\\n// Check always the full length\\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},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718360533},{"Type":1,"NewValue":"{\"Id\":11290,\"Group\":{\"Id\":5522,\"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\":[]},\"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\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Retrieve the current firmware version from the device\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718618533}],"LanguageId":null,"Tags":[]},{"Id":11290,"Group":{"Id":5522,"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":[]},"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\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Retrieve the current firmware version from the device\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":3307,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"2.8","FirmwareVersion":null,"Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Get Firmware version","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 = '02'; //Ask for firmware\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\n// Check always the full length\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},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11291,"Group":{"Id":5522,"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":[]},"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":[{"Type":0,"NewValue":"{\"Id\":11291,\"Group\":{\"Id\":5522,\"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\":[]},\"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\":[],\"Tags\":[]}","Timestamp":1718360702},{"Type":1,"NewValue":"{\"Id\":11291,\"Group\":{\"Id\":5522,\"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\":[]},\"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\\\"],\\\"order\\\":2}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718618542},{"Type":1,"NewValue":"{\"Id\":11291,\"Group\":{\"Id\":5522,\"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\":[]},\"Name\":\"Current Firmware Version\",\"Json\":\"{\\\"name\\\":\\\"Current Firmware Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Firmware Version Short\\\",\\\"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\":[],\"Tags\":[]}","Timestamp":1718818053}],"LanguageId":null,"Tags":[]},{"Id":11316,"Group":{"Id":5522,"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":[]},"Name":"Current Firmware Version Long","Json":"{\"name\":\"Current Firmware Version Long\",\"default\":\"\",\"description\":\"Current Firmware Version Long\",\"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":0,"NewValue":"{\"Id\":11316,\"Group\":{\"Id\":5522,\"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\":[]},\"Name\":\"Current Firmware Version Long\",\"Json\":\"{\\\"name\\\":\\\"Current Firmware Version Long\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Firmware Version Long\\\",\\\"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\":[],\"Tags\":[]}","Timestamp":1718818112}],"LanguageId":null,"Tags":[]},{"Id":8120,"Group":{"Id":5037,"Name":"Cycle Interval","Json":{"description":"Cycle Interval","columns":1,"order":17,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Cycle Interval","Json":"{\"name\":\"Cycle Interval\",\"default\":\"\",\"description\":\"Cycle Interval\",\"type\":\"number\",\"suffix\":\"minutes\",\"prefix\":null,\"min\":1,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The interval the Rio will send regular updates to IntelliCare\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":3317,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"3.0","FirmwareVersion":"V04b.8601.2406.1.0.16.4411.2406.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Working Mode","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 localTesting = false;\r\nif (localTesting) var params = {\r\n 'CycleInterval': {\r\n 'CycleInterval': 10,\r\n 'LazyCycleInterval': 60\r\n },\r\n 'WorkingMode': {\r\n 'Mode': '06'\r\n }\r\n};\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// Select Communicate behaviour of the Rio.\r\n// Cycle = C; Heartbeat = H; Lazy Cycle = LC. \r\n//Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\r\n// load parameters Cycle interval and Lazy cycle interval\r\nif (params.CycleInterval.CycleInterval) {\r\n var cycleInterval = parseInt(params.CycleInterval.CycleInterval) * 60;\r\n} else var cycleInterval = 600;\r\nif (params.CycleInterval.LazyCycleInterval) {\r\n var lazyCycleInterval = parseInt(params.CycleInterval.LazyCycleInterval) * 60;\r\n} else var lazyCycleInterval = 3600;\r\n// Check selected working mode\r\nif (params.WorkingMode.Mode) {\r\n var mode = params.WorkingMode.Mode;\r\n} else {\r\n var mode = '06';\r\n} // default mode 6\r\n// improve command to add both GPRS and SMS comunication\r\nswitch (mode) {\r\n case '02':\r\n case '06':\r\n var value = '000000'; // Time interval to zero\r\n var valueSMS = ',' + cycleInterval / 60 + 'M,' + lazyCycleInterval / 60 + 'M';\r\n break;\r\n case '03':\r\n var value = '000000'; // Time interval to zero\r\n var valueSMS = ',' + cycleInterval / 60 + 'M';\r\n break;\r\n case '04':\r\n case '05': // add time interval to the command\r\n if (cycleInterval) {\r\n var value = parseInt(cycleInterval);\r\n value = decimalToHex(value);\r\n value = ('000000' + value).slice(-6).toUpperCase();\r\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\r\n var valueSMS = ',' + cycleInterval / 60 + 'M';\r\n } else {\r\n var value = 60 * 60; // default value 60*60 seconds\r\n value = decimalToHex(value);\r\n value = ('000000' + value).slice(-6).toUpperCase();\r\n value = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\r\n var valueSMS = ',' + 60 + 'M';\r\n }\r\n break;\r\n default:\r\n var value = '000000'; // Time interval to zero\r\n var valueSMS = '';\r\n}\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '05';\r\nvar key = '0A';\r\nvar messageBody = command + keyLength + key + value + mode;\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' + '0700' + 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 = 'mode' + mode.substring(1) + valueSMS;\r\nAddValueSMS('dataSMS', dataSMS);\r\ndebug(data);\r\ndebug(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 debug(str) { // write debug info to console log, if localTesting\r\n if (localTesting === \"True\") {\r\n console.log(str);\r\n }\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":2,"Order":2},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[{"Id":1714,"Name":"cycleInterval","BackendAction":"cycleInterval","Value":""}]},{"Id":8197,"Group":{"Id":5026,"Name":"Working Mode","Json":{"description":"Different modes for communication","columns":1,"order":16,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Mode","Json":"{\"name\":\"Mode\",\"default\":\"\",\"description\":\"Different modes for communication\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Select Communicate behaviour of the Rio. Cycle = C; Heartbeat = H; Lazy Cycle = LC. Mode 1: H; Mode 2: C H LC; Mode 3: C H; Mode 4: LC; Mode 5: LC; Mode 6: C H LC;\",\"options\":[{\"value\":\"01\",\"label\":\"M1: No Cycles until alarm is triggered\"},{\"value\":\"02\",\"label\":\"M2: Always stay online, Location only on movement\"},{\"value\":\"03\",\"label\":\"M3: Always online, Location only on movement, no lazy cycle\"},{\"value\":\"04\",\"label\":\"M4: Only lazy cycles; Location only on lazy cycle.\"},{\"value\":\"05\",\"label\":\"M5: Only lazy cycles, GSM/GPRS/Location off between cycles\"},{\"value\":\"06\",\"label\":\"M6: (default) Sends data on regular cycles, Location only on movement\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":{"Id":3327,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"3.0","FirmwareVersion":"V04b.8601.2406.1.0.16.4411.2406.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Cycle","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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":3},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":12381,"Group":{"Id":7436,"Name":"Convert Device","Json":{"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":"Profile","Json":"{\"name\":\"Profile\",\"default\":\"\",\"description\":\"Choose Profile\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Select profile to convert the device\",\"options\":[{\"label\":\"Roam\",\"value\":\"04\"},{\"label\":\"Sentry\",\"value\":\"64\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":12381,\"Group\":{\"Id\":7436,\"Name\":\"Convert Device\",\"Json\":{\"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\":\"Profile\",\"Json\":\"{\\\"name\\\":\\\"Profile\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Choose Profile\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select profile to convert the device\\\",\\\"options\\\":[{\\\"label\\\":\\\"Roam\\\",\\\"value\\\":\\\"04\\\"},{\\\"label\\\":\\\"Sentry\\\",\\\"value\\\":\\\"64\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1753800289},{"Type":1,"NewValue":"{\"Id\":12381,\"Group\":{\"Id\":7436,\"Name\":\"Convert Device\",\"Json\":{\"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\":\"Profile\",\"Json\":\"{\\\"name\\\":\\\"Profile\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Choose Profile\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select profile to convert the device\\\",\\\"options\\\":[{\\\"value\\\":\\\"04\\\",\\\"label\\\":\\\"Roam\\\"},{\\\"value\\\":\\\"64\\\",\\\"label\\\":\\\"Sentry\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1753801474},{"Type":0,"NewValue":"{\"Id\":12381,\"Group\":{\"Id\":7436,\"Name\":\"Convert Device\",\"Json\":{\"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\":\"Profile\",\"Json\":\"{\\\"name\\\":\\\"Profile\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Choose Profile\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select profile to convert the device\\\",\\\"options\\\":[{\\\"value\\\":\\\"04\\\",\\\"label\\\":\\\"Roam\\\"},{\\\"value\\\":\\\"64\\\",\\\"label\\\":\\\"Sentry\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":5811,\"Protocol\":{\"Id\":184,\"Code\":\"Oysta Rio\",\"Version\":\"3.6\",\"FirmwareVersion\":\"V04b.8601.2406.1.0.16.4411.2406.25\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"setCustomId\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"// setCustomId\\r\\n// ConvertDevice.Profile\\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 configs = [];\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\nvar key = '47';\\r\\nif (params.ConvertDevice.Profile == 'Rio') {\\r\\n var keyLength = '02';\\r\\n var customID = '04';\\r\\n var totalLenght = '0400';\\r\\n} else if (params.ConvertDevice.Profile == 'Roam') {\\r\\n var keyLength = '02';\\r\\n var customID = '64';\\r\\n var totalLenght = '0400';\\r\\n} else {\\r\\n var keyLength = '01';\\r\\n var customID = '';\\r\\n var totalLenght = '0300';\\r\\n}\\r\\nvar messageBody = command + keyLength + key + customID;\\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' + totalLenght + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\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\":null},\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1753801478},{"Type":2,"NewValue":"{\"Id\":12381,\"Group\":{\"Id\":7436,\"Name\":\"Convert Device\",\"Json\":{\"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\":\"Profile\",\"Json\":\"{\\\"name\\\":\\\"Profile\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Choose Profile\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select profile to convert the device\\\",\\\"options\\\":[{\\\"value\\\":\\\"04\\\",\\\"label\\\":\\\"Roam\\\"},{\\\"value\\\":\\\"64\\\",\\\"label\\\":\\\"Sentry\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1761240137}],"LanguageId":null,"Tags":[]},{"Id":12381,"Group":{"Id":7436,"Name":"Convert Device","Json":{"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":"Profile","Json":"{\"name\":\"Profile\",\"default\":\"\",\"description\":\"Choose Profile\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Select profile to convert the device\",\"options\":[{\"value\":\"04\",\"label\":\"Roam\"},{\"value\":\"64\",\"label\":\"Sentry\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":{"Id":5811,"Protocol":{"Id":184,"Code":"Oysta Rio","Version":"3.6","FirmwareVersion":"V04b.8601.2406.1.0.16.4411.2406.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"setCustomId","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"// setCustomId\r\n// ConvertDevice.Profile\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 configs = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar key = '47';\r\nif (params.ConvertDevice.Profile == 'Rio') {\r\n var keyLength = '02';\r\n var customID = '04';\r\n var totalLenght = '0400';\r\n} else if (params.ConvertDevice.Profile == 'Roam') {\r\n var keyLength = '02';\r\n var customID = '64';\r\n var totalLenght = '0400';\r\n} else {\r\n var keyLength = '01';\r\n var customID = '';\r\n var totalLenght = '0300';\r\n}\r\nvar messageBody = command + keyLength + key + customID;\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' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\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":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]}],"ProtocolChanges":[{"Version":"2.4","UserName":"Andy-Superadmin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Updated operation ","Timestamp":1694412468},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"ACK-RST","Message":"(Delete) (ACK-RST)","Timestamp":1694504639},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"CYC","Message":"(Delete) (CYC)","Timestamp":1694504710},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"CHK","Message":"(Update) (CHK) Add signal strenght and work mode","Timestamp":1694505577},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"COMM-STP","Message":"(Create) (COMM-STP) Receive step counting from watch","Timestamp":1694505682},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"CYC","Message":"(Update) (CYC) change workmode variable name","Timestamp":1694505829},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"CYC-BUF","Message":"(Delete) (CYC-BUF)","Timestamp":1694505881},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"CYC-BUF","Message":"(Delete) (CYC-BUF)","Timestamp":1694505892},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"CYC-BUFF","Message":"(Delete) (CYC-BUFF)","Timestamp":1694505905},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"HRT","Message":"(Update) (HRT) Add Event time and Trust Level","Timestamp":1694506002},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Device Reboot","Message":"(Update) (Device Reboot) Add SMS command","Timestamp":1694506441},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"APN","Message":"(Update) (APN) set priority","Timestamp":1694506496},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Continuous Locate","Message":"(Update) (Continuous Locate) set priority","Timestamp":1694506592},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Continuous Locate","Message":"(Update) (Continuous Locate) set priority","Timestamp":1694506608},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Cycle","Message":"(Update) (Cycle) set priority","Timestamp":1694506673},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Enable Control","Message":"(Update) (Enable Control) set priority","Timestamp":1694506753},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Extra Enable Control","Message":"(Update) (Extra Enable Control) set priority command","Timestamp":1694506789},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Enable Control","Message":"(Update) (Enable Control) set priority","Timestamp":1694506831},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Factory Reset","Message":"(Update) (Factory Reset) Add SMS command","Timestamp":1694506940},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Heart Rate Detecting Interval","Message":"(Create) (Heart Rate Detecting Interval) Create Command","Timestamp":1694507189},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Server","Message":"(Update) (Server) set priority","Timestamp":1694507326},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Step Collect Settings","Message":"(Create) (Step Collect Settings) create command","Timestamp":1694507472},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Welfare Check","Message":"(Update) (Welfare Check) change send attempts to 25","Timestamp":1694507593},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Working Mode","Message":"(Update) (Working Mode) set priority","Timestamp":1694507637},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable Heart Rate Monitor","Message":"(Create) (Enable Disable Heart Rate Monitor) new param","Timestamp":1694507749},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable Heart Rate Monitor","Message":"Associate groupParam Enable Disable Heart Rate Monitor to command Heart Rate Detecting Interval","Timestamp":1694507754},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Detecting Interval","Message":"(Create) (Heart Rate Detecting Interval) create param","Timestamp":1694507804},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Detecting Interval","Message":"Associate groupParam Heart Rate Detecting Interval to command Heart Rate Detecting Interval","Timestamp":1694507810},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Step Counting","Message":"(Create) (Step Counting) create group","Timestamp":1694507879},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable Step Counting","Message":"(Create) (Enable Disable Step Counting) create param","Timestamp":1694507929},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable Step Counting","Message":"Associate groupParam Enable Disable Step Counting to command Step Collect Settings","Timestamp":1694507935},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Step Counting Interval","Message":"(Create) (Step Counting Interval) create param","Timestamp":1694507992},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Step Counting Interval","Message":"Associate groupParam Step Counting Interval to command Step Collect Settings","Timestamp":1694507997},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Step Counting","Message":"(Update) (Step Counting) Reorder Groups","Timestamp":1694508080},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Device Version","Message":"(Update) (Device Version) Reorder Groups","Timestamp":1694508083},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"No Activity","Message":"(Update) (No Activity) Reorder Groups","Timestamp":1694508086},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Voice Prompt","Message":"(Update) (Voice Prompt) Reorder Groups","Timestamp":1694508090},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Update Firmware","Message":"(Update) (Update Firmware) Reorder Groups","Timestamp":1694508094},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"SMS Prefix","Message":"(Update) (SMS Prefix) Reorder Groups","Timestamp":1694508098},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Server","Message":"(Update) (Server) Reorder Groups","Timestamp":1694508103},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Set APN","Message":"(Update) (Set APN) Reorder Groups","Timestamp":1694508107},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Request Location","Message":"(Update) (Request Location) Reorder Groups","Timestamp":1694508110},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"SMS Password","Message":"(Update) (SMS Password) Reorder Groups","Timestamp":1694508114},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Enable Control","Message":"(Update) (Enable Control) Reorder Groups","Timestamp":1694508117},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Working Mode","Message":"(Update) (Working Mode) Reorder Groups","Timestamp":1694508121},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Cycle Interval","Message":"(Update) (Cycle Interval) Reorder Groups","Timestamp":1694508126},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Continuous Locate","Message":"(Update) (Continuous Locate) Reorder Groups","Timestamp":1694508129},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"System Language","Message":"(Update) (System Language) Reorder Groups","Timestamp":1694508133},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Delete Records","Message":"(Update) (Delete Records) Reorder Groups","Timestamp":1694508137},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Factory Reset","Message":"(Update) (Factory Reset) Reorder Groups","Timestamp":1694508140},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Device Reboot","Message":"(Update) (Device Reboot) Reorder Groups","Timestamp":1694508144},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Power Off","Message":"(Update) (Power Off) Reorder Groups","Timestamp":1694508148},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable Enable Control","Message":"(Create) (Enable Disable Enable Control) create param","Timestamp":1694508203},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable Enable Control","Message":"Associate groupParam Enable Disable Enable Control to command Enable Control","Timestamp":1694508209},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Enable Control","Message":"(Update) (Enable Control) Add Step Counting Function Enabler","Timestamp":1694508263},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"Enable Control","Message":"(Update) (Enable Control) Reorder Groups","Timestamp":1694508340},{"Version":"2.4","UserName":"juanmi","Resource":"Group","Name":"SMS Password","Message":"(Update) (SMS Password) Reorder Groups","Timestamp":1694508344},{"Version":"2.4","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) update to 2.4 (add HRT and Step Counting + other features)","Timestamp":1694508502},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Phone Settings","Message":"(Update) (Phone Settings) Add silent mode","Timestamp":1694531081},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Speed Dial Number","Message":"(Update) (Speed Dial Number) commentary","Timestamp":1694532262},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"HRT","Message":"(Update) (HRT) add Label","Timestamp":1694533036},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"COMM-STP","Message":"(Update) (COMM-STP) add label","Timestamp":1694533081},{"Version":"2.4","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Add labels to HRT and STP counting","Timestamp":1694533336},{"Version":"2.4","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Reset alarm value after transmit the oysta template","Timestamp":1694599053},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Continuous Locate","Message":"(Update) (Continuous Locate) Ack issue test","Timestamp":1694692011},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Cycle","Message":"(Update) (Cycle) Ack issue test","Timestamp":1694692025},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Enable Control","Message":"(Update) (Enable Control) Ack issue test","Timestamp":1694692073},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Extra Enable Control","Message":"(Update) (Extra Enable Control) Ack issue test","Timestamp":1694692100},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Fall Down Alert","Message":"(Update) (Fall Down Alert) Ack issue test","Timestamp":1694692118},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Heart Rate Detecting Interval","Message":"(Update) (Heart Rate Detecting Interval) Ack issue test","Timestamp":1694692140},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Phone Settings","Message":"(Update) (Phone Settings) Ack issue test","Timestamp":1694692178},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Power Alert","Message":"(Update) (Power Alert) Ack issue test","Timestamp":1694692202},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"RingTone Volume","Message":"(Update) (RingTone Volume) Ack issue test","Timestamp":1694692228},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set SOS Number","Message":"(Update) (Set SOS Number) Ack issue test","Timestamp":1694692256},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"SOS Button Settings","Message":"(Update) (SOS Button Settings) Ack issue test","Timestamp":1694692287},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"SOS Option","Message":"(Update) (SOS Option) Ack issue test","Timestamp":1694692312},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Speaker Volume","Message":"(Update) (Speaker Volume) Ack issue test","Timestamp":1694692359},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Speed Dial","Message":"(Update) (Speed Dial) Ack issue test","Timestamp":1694692383},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Step Collect Settings","Message":"(Update) (Step Collect Settings) Ack issue test","Timestamp":1694692405},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Tilt Alert","Message":"(Update) (Tilt Alert) Ack issue test","Timestamp":1694692419},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"ENC-2","Message":"(Update) (ENC-2) Insert \"[[]]\" for handle multi-ack msgs","Timestamp":1694709634},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Step","Message":"(Create) (Step) Add Step Counting","Timestamp":1694716249},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Step","Message":"Associate groupParam Step to command Enable Control","Timestamp":1694716254},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Heart Rate Detecting Interval","Message":"(Update) (Heart Rate Detecting Interval) if it is not a watch send dummy msg to set up mic volume to 10","Timestamp":1694765236},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Step Collect Settings","Message":"(Update) (Step Collect Settings) if it is not a watch, sends dummy msg to set up mic volume to 10","Timestamp":1694765286},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Factory Reset","Message":"(Update) (Factory Reset) Add option for factory reset by SMS for the watch","Timestamp":1694765370},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"ENC-2","Message":"(Update) (ENC-2) Delete [[]]. multiple acks will be implemented in operations code","Timestamp":1694769070},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"COMM-STP","Message":"(Update) (COMM-STP) change to alarm","Timestamp":1694775990},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"STP","Message":"(Update) (STP) change MSGcode to STEP","Timestamp":1694776570},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"STP","Message":"(Update) (STP) change to alarm","Timestamp":1694791307},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Working Mode","Message":"(Update) (Working Mode) Modify command to send by SMS, and remove intervalTime parameter.","Timestamp":1694865115},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"ACK-RST","Message":"(Update) (ACK-RST) Add oysta Template for Spanish ACK","Timestamp":1695719096},{"Version":"2.4","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Add MultiACK Handler","Timestamp":1695751192},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Alarm Clock 1","Message":"(Update) (Alarm Clock 1) multi Ack change to 2 ","Timestamp":1695907904},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Alarm Clock 2","Message":"(Update) (Alarm Clock 2) multi Ack change to 2 ","Timestamp":1695907928},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Alarm Clock 3","Message":"(Update) (Alarm Clock 3) multi Ack change to 2 ","Timestamp":1695907948},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Alarm Clock 4","Message":"(Update) (Alarm Clock 4) multi Ack change to 2 ","Timestamp":1695907970},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"ASet SMS Prefix","Message":"(Update) (ASet SMS Prefix) multi Ack change to 2 ","Timestamp":1695907993},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 1","Message":"(Update) (Beacon 1) multi Ack change to 2 ","Timestamp":1695908009},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 10","Message":"(Update) (Beacon 10) multi Ack change to 2 ","Timestamp":1695908059},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 2","Message":"(Update) (Beacon 2) multi Ack change to 2 ","Timestamp":1695908074},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 3","Message":"(Update) (Beacon 3) multi Ack change to 2 ","Timestamp":1695908094},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 4","Message":"(Update) (Beacon 4) multi Ack change to 2 ","Timestamp":1695908112},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 5","Message":"(Update) (Beacon 5) multi Ack change to 2 ","Timestamp":1695908127},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 6","Message":"(Update) (Beacon 6) multi Ack change to 2 ","Timestamp":1695908144},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 7","Message":"(Update) (Beacon 7) multi Ack change to 2 ","Timestamp":1695908162},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 8","Message":"(Update) (Beacon 8) multi Ack change to 2 ","Timestamp":1695908211},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 9","Message":"(Update) (Beacon 9) multi Ack change to 2 ","Timestamp":1695908231},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Continuous Locate","Message":"(Update) (Continuous Locate) multi Ack change to 2 ","Timestamp":1695908255},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Cycle","Message":"(Update) (Cycle) multi Ack change to 2 ","Timestamp":1695908282},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Delete Records","Message":"(Update) (Delete Records) multi Ack change to 2 ","Timestamp":1695908318},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Device Reboot","Message":"(Update) (Device Reboot) multi Ack change to 2 ","Timestamp":1695908342},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Enable Control","Message":"(Update) (Enable Control) multi Ack change to 2 ","Timestamp":1695908366},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Extra Enable Control","Message":"(Update) (Extra Enable Control) multi Ack change to 2 ","Timestamp":1695908390},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Factory Reset","Message":"(Update) (Factory Reset) multi Ack change to 2 ","Timestamp":1695908410},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Fall Down Alert","Message":"(Update) (Fall Down Alert) multi Ack change to 2 ","Timestamp":1695908430},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Find Device","Message":"(Update) (Find Device) multi Ack change to 2 ","Timestamp":1695908450},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Get Firmware version","Message":"(Update) (Get Firmware version) multi Ack change to 2 ","Timestamp":1695908473},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Heart Rate Detecting Interval","Message":"(Update) (Heart Rate Detecting Interval) multi Ack change to 2 ","Timestamp":1695908488},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Initialize Mileage","Message":"(Update) (Initialize Mileage) multi Ack change to 2 ","Timestamp":1695908503},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Mic Volume","Message":"(Update) (Mic Volume) multi Ack change to 2 ","Timestamp":1695908524},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Motion Alert","Message":"(Update) (Motion Alert) multi Ack change to 2 ","Timestamp":1695908563},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"No Disturb","Message":"(Update) (No Disturb) multi Ack change to 2 ","Timestamp":1695908583},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"No Motion Alert","Message":"(Update) (No Motion Alert) multi Ack change to 2 ","Timestamp":1695908608},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Over Speed Alert","Message":"(Update) (Over Speed Alert) multi Ack change to 2 ","Timestamp":1695908623},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Phone Settings","Message":"(Update) (Phone Settings) multi Ack change to 2 ","Timestamp":1695908646},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Power Alert","Message":"(Update) (Power Alert) multi Ack change to 2 ","Timestamp":1695908668},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Power Off","Message":"(Update) (Power Off) multi Ack change to 2 ","Timestamp":1695908691},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Request Location","Message":"(Update) (Request Location) multi Ack change to 2 ","Timestamp":1695908709},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"RingTone Volume","Message":"(Update) (RingTone Volume) multi Ack change to 2 ","Timestamp":1695908725},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set Authorised Number 1","Message":"(Update) (Set Authorised Number 1) multi Ack change to 2 ","Timestamp":1695908749},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set Authorised Number 2","Message":"(Update) (Set Authorised Number 2) multi Ack change to 2 ","Timestamp":1695908771},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set Authorised Number 3","Message":"(Update) (Set Authorised Number 3) multi Ack change to 2 ","Timestamp":1695908787},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set Authorised Number 4","Message":"(Update) (Set Authorised Number 4) multi Ack change to 2 ","Timestamp":1695908804},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set Authorised Number 5","Message":"(Update) (Set Authorised Number 5) multi Ack change to 2 ","Timestamp":1695908820},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set Authorised Number 6","Message":"(Update) (Set Authorised Number 6) multi Ack change to 2 ","Timestamp":1695908837},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set Authorised Number 7","Message":"(Update) (Set Authorised Number 7) multi Ack change to 2 ","Timestamp":1695908858},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set Authorised Number 8","Message":"(Update) (Set Authorised Number 8) multi Ack change to 2 ","Timestamp":1695908883},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set Oysta Number","Message":"(Update) (Set Oysta Number) multi Ack change to 2 ","Timestamp":1695908900},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set SOS Number","Message":"(Update) (Set SOS Number) multi Ack change to 2 ","Timestamp":1695908924},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set System Language","Message":"(Update) (Set System Language) multi Ack change to 2 ","Timestamp":1695908946},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"SMS Password","Message":"(Update) (SMS Password) multi Ack change to 2 ","Timestamp":1695908977},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"SOS Button Settings","Message":"(Update) (SOS Button Settings) multi Ack change to 2 ","Timestamp":1695908998},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"SOS Option","Message":"(Update) (SOS Option) multi Ack change to 2 ","Timestamp":1695909019},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Speaker Volume","Message":"(Update) (Speaker Volume) multi Ack change to 2 ","Timestamp":1695909040},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Speed Dial","Message":"(Update) (Speed Dial) multi Ack change to 2 ","Timestamp":1695909062},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Speed Dial Number","Message":"(Update) (Speed Dial Number) multi Ack change to 2 ","Timestamp":1695909094},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Step Collect Settings","Message":"(Update) (Step Collect Settings) multi Ack change to 2 ","Timestamp":1695909108},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Step Collect Settings","Message":"(Update) (Step Collect Settings) multi Ack change to 2 ","Timestamp":1695909133},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Step Collect Settings","Message":"(Update) (Step Collect Settings) multi Ack change to 2 ","Timestamp":1695909154},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Tilt Alert","Message":"(Update) (Tilt Alert) multi Ack change to 2 ","Timestamp":1695909174},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Voice Prompt","Message":"(Update) (Voice Prompt) multi Ack change to 2 ","Timestamp":1695909245},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Voice Prompt Volume","Message":"(Update) (Voice Prompt Volume) multi Ack change to 2 ","Timestamp":1695909306},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Welfare Check","Message":"(Update) (Welfare Check) multi Ack change to 2 ","Timestamp":1695909332},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Working Mode","Message":"(Update) (Working Mode) multi Ack change to 2 ","Timestamp":1695909366},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 9","Message":"(Update) (Beacon 9) multi Ack change to 2 ","Timestamp":1695909400},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Enable Control","Message":"(Update) (Enable Control) multi Ack change to 2 ","Timestamp":1695909438},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Find Device","Message":"(Update) (Find Device) multi Ack change to 2 ","Timestamp":1695909472},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set SOS Number","Message":"(Update) (Set SOS Number) multi Ack change to 2 ","Timestamp":1695909519},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Cycle","Message":"(Update) (Cycle) multi Ack test","Timestamp":1695910701},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Cycle","Message":"(Update) (Cycle) multi Ack test","Timestamp":1695910765},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Cycle","Message":"(Update) (Cycle) multi ack test","Timestamp":1695910798},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set SOS Number","Message":"(Update) (Set SOS Number) multi ack test needs to be 4","Timestamp":1695911435},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"SOS Button Settings","Message":"(Update) (SOS Button Settings) needs to be 4 for multi ","Timestamp":1695911479},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"SOS Option","Message":"(Update) (SOS Option) multi ack test ","Timestamp":1695911521},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Welfare Check","Message":"(Update) (Welfare Check) multi Ack test 4","Timestamp":1695911565},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Cycle","Message":"(Update) (Cycle) multi Ack test 4","Timestamp":1695911874},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Continuous Locate","Message":"(Update) (Continuous Locate) multi Ack test 4","Timestamp":1695912146},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Enable Control","Message":"(Update) (Enable Control) multi Ack test 4","Timestamp":1695912175},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"SOS Button Settings","Message":"(Update) (SOS Button Settings) multi ack test ","Timestamp":1695913764},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Set SOS Number","Message":"(Update) (Set SOS Number) multi ack test ","Timestamp":1695913790},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Speed Dial","Message":"(Update) (Speed Dial) changed speed hopefull last one ","Timestamp":1695935979},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Speed Dial Number","Message":"(Update) (Speed Dial Number) chaged to 4 to help with ack","Timestamp":1695936022},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Step Collect Settings","Message":"(Update) (Step Collect Settings) step to 4 from 2","Timestamp":1695937625},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Heart Rate Detecting Interval","Message":"(Update) (Heart Rate Detecting Interval) step to 4 from 2","Timestamp":1695937689},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Heart Rate Detecting Interval","Message":"(Update) (Heart Rate Detecting Interval) step to 6 from 4","Timestamp":1695938172},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Step Collect Settings","Message":"(Update) (Step Collect Settings) step to 4 from 2","Timestamp":1695938206},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Fall Down Alert","Message":"(Update) (Fall Down Alert) step to 4 from 2","Timestamp":1695939148},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Phone Settings","Message":"(Update) (Phone Settings) step to 4 from 2","Timestamp":1695939190},{"Version":"2.4","UserName":"juanmi","Resource":"Operation","Name":"OnUpdateProtocol_EView","Message":"(Create) (OnUpdateProtocol_EView) Define first version of configsToUpdate for OnUpdateProtocol","Timestamp":1696071788},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"ACK-RBT","Message":"(Update) (ACK-RBT) Add Spanish ACK msg","Timestamp":1696072379},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Cycle Interval","Message":"(Update) (Cycle Interval) Define tag cycleInterval","Timestamp":1696074130},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Working Mode","Message":"(Update) (Working Mode) Change default to SMS","Timestamp":1696074187},{"Version":"2.4","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Create decode function to parse multiACKs","Timestamp":1696354222},{"Version":"2.4","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Fix answer ACK for cycle msg","Timestamp":1696370464},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable No Activity","Message":"(Update) (Enable Disable No Activity) noActivityActivate","Timestamp":1696371636},{"Version":"2.4","UserName":"juanmi","Resource":"GroupParam","Name":"No Activity","Message":"(Update) (No Activity) noActivityInterval Tag","Timestamp":1696371709},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Power Alert","Message":"(Update) (Power Alert) multi ack","Timestamp":1696443168},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Fall Down Alert","Message":"(Update) (Fall Down Alert) multi ack","Timestamp":1696443207},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Speed Dial","Message":"(Update) (Speed Dial) multi ack","Timestamp":1696443459},{"Version":"2.4","UserName":"Michael_Admin","Resource":"Command","Name":"Speed Dial Number","Message":"(Update) (Speed Dial Number) multi ack","Timestamp":1696443499},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"ACK-SRV","Message":"(Update) (ACK-SRV) add Spanish translation","Timestamp":1696493376},{"Version":"2.4","UserName":"juanmi","Resource":"MessageType","Name":"ACK-APN","Message":"(Update) (ACK-APN) add Spanish translation","Timestamp":1696493432},{"Version":"2.4","UserName":"juanmi","Resource":"Command","Name":"Welfare Check","Message":"(Update) (Welfare Check) Add fake command (mic to 10) when device is watch EV05","Timestamp":1696607872},{"Version":"2.4","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Add Beacon V2 support (0x2C) Decode in command type 01","Timestamp":1696787161},{"Version":"2.4","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Decode Step/HRT and cycle in the same msg","Timestamp":1696862342},{"Version":"2.4","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Add Heart rate and step counting labels to event widget.\nAdd SMS command for Device Reboot.\nSet priority order for main commands.\nAdd SMS command fo Factory reset.\nNew command and group to setup Heart Rate Detecting Interval.\nNew command and group to setup Heart Step Collecting Settings.\nAdd checkbox in \"enable control\" group to Enable/disable step counting fuction.\nAdd Silent Mode in Phone Settings.","Timestamp":1696924665},{"Version":"2.5","UserName":"juanmi","Resource":"Command","Name":"Working Mode","Message":"(Update) (Working Mode) change to default transmission","Timestamp":1697011851},{"Version":"2.5","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Change Working mode command to default communication","Timestamp":1697012164},{"Version":"2.6","UserName":"juanmi","Resource":"Command","Name":"No Disturb","Message":"(Update) (No Disturb) Fix small typo error in params name (DoNotDisturb.)","Timestamp":1698145878},{"Version":"2.6","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Added DoNotDisturb function (FlyMode)","Timestamp":1698316947},{"Version":"2.7","UserName":"Michael_Admin","Resource":"GroupParam","Name":"Set APN","Message":"(Update) (Set APN) checking to see if auto-update is broken ","Timestamp":1700220928},{"Version":"2.7","UserName":"juanmi","Resource":"Group","Name":"WiFi Connect","Message":"(Create) (WiFi Connect) Add group to set WiFi connection details","Timestamp":1706034970},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable WiFi Connect","Message":"(Create) (Enable Disable WiFi Connect) Add Enable Disable WiFi Connect Param","Timestamp":1706035083},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"(Create) (SSID) Add SSID param for WiFi Connect","Timestamp":1706035167},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"(Create) (Password) Add Password param to WiFI Connect","Timestamp":1706035231},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable WiFi Connect","Message":"(Update) (Enable Disable WiFi Connect) Reorder Group Params","Timestamp":1706035435},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"(Update) (SSID) Reorder Group Params","Timestamp":1706035440},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"(Update) (Password) Reorder Group Params","Timestamp":1706035446},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Set WiFi Connect","Message":"(Create) (Set WiFi Connect) Create WiFi Connect Command","Timestamp":1706037441},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable WiFi Connect","Message":"(Update) (Enable Disable WiFi Connect) Assign Command","Timestamp":1706037499},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable WiFi Connect","Message":"Associate groupParam Enable Disable WiFi Connect to command Set WiFi Connect","Timestamp":1706037506},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"(Update) (SSID) Assign Command","Timestamp":1706037524},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"Associate groupParam SSID to command Set WiFi Connect","Timestamp":1706037536},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"(Update) (Password) Assign Command","Timestamp":1706037562},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"Associate groupParam Password to command Set WiFi Connect","Timestamp":1706037567},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Set WiFi Connect","Message":"(Update) (Set WiFi Connect) uncomment configSMS","Timestamp":1706344820},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable WiFi Connect","Message":"(Update) (Enable Disable WiFi Connect) Reorder Group Params","Timestamp":1706344873},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"(Update) (SSID) Reorder Group Params","Timestamp":1706344878},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"(Update) (Password) Reorder Group Params","Timestamp":1706344897},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"(Update) (SSID) add description and help text","Timestamp":1706344967},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"(Update) (Password) add description and help text","Timestamp":1706345031},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable WiFi Connect","Message":"(Update) (Enable Disable WiFi Connect) add description","Timestamp":1706345588},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable WiFi Connect","Message":"(Update) (Enable Disable WiFi Connect) Reorder Group Params","Timestamp":1706345599},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"(Update) (SSID) Reorder Group Params","Timestamp":1706345604},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"(Update) (Password) Reorder Group Params","Timestamp":1706345610},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"(Update) (SSID) add min lenght to 1","Timestamp":1706345663},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"(Update) (Password) add min lenght to 1","Timestamp":1706345679},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"(Update) (SSID) Reorder Group Params","Timestamp":1706345702},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"(Update) (Password) Reorder Group Params","Timestamp":1706345708},{"Version":"2.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Add send Get Timestamp to the device","Timestamp":1706346502},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"(Update) (SSID) No min lenght","Timestamp":1706618108},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"(Update) (Password) No min lenght","Timestamp":1706618124},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"WiFi Connect","Message":"(Update) (WiFi Connect) Reorder Groups","Timestamp":1706784440},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"Request Location","Message":"(Update) (Request Location) Reorder Groups","Timestamp":1706784444},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"Enable Control","Message":"(Update) (Enable Control) Reorder Groups","Timestamp":1706784449},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"SMS Password","Message":"(Update) (SMS Password) Reorder Groups","Timestamp":1706784453},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"Working Mode","Message":"(Update) (Working Mode) Reorder Groups","Timestamp":1706784457},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"Cycle Interval","Message":"(Update) (Cycle Interval) Reorder Groups","Timestamp":1706784461},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"Continuous Locate","Message":"(Update) (Continuous Locate) Reorder Groups","Timestamp":1706784467},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"System Language","Message":"(Update) (System Language) Reorder Groups","Timestamp":1706784471},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"Delete Records","Message":"(Update) (Delete Records) Reorder Groups","Timestamp":1706784476},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"Factory Reset","Message":"(Update) (Factory Reset) Reorder Groups","Timestamp":1706784480},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"Device Reboot","Message":"(Update) (Device Reboot) Reorder Groups","Timestamp":1706784485},{"Version":"2.7","UserName":"David_Admin","Resource":"Group","Name":"Power Off","Message":"(Update) (Power Off) Reorder Groups","Timestamp":1706784490},{"Version":"2.7","UserName":"juanmi","Resource":"Operation","Name":"OnUpdateProtocol_EView","Message":"(Update) (OnUpdateProtocol_EView) Add new param: WiFiConnect.EnableDisableWiFiConnect","Timestamp":1707127809},{"Version":"2.7","UserName":"juanmi","Resource":"MessageType","Name":"HRT","Message":"(Update) (HRT) Set event type to Standard ticket: 605442","Timestamp":1707754959},{"Version":"2.7","UserName":"juanmi","Resource":"MessageType","Name":"STP","Message":"(Update) (STP) Set event type to Standard, ticket:605449","Timestamp":1707755016},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Working Mode","Message":"(Update) (Working Mode) Add send by SMS ticket 605414","Timestamp":1707755363},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Working Mode","Message":"(Update) (Working Mode) fix type \"False\" to false","Timestamp":1707850781},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Step Collect Settings","Message":"(Update) (Step Collect Settings) change heartBeat = '0A'; // 10 mic level","Timestamp":1707985331},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Heart Rate Detecting Interval","Message":"(Update) (Heart Rate Detecting Interval) change heartBeat = '0A'; // 10 mic level","Timestamp":1707985360},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Set Watch Settings","Message":"(Create) (Set Watch Settings) Create command Set Watch Settings","Timestamp":1707985821},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable Heart Rate Monitor","Message":"(Update) (Enable Disable Heart Rate Monitor) Add set watch settings command","Timestamp":1707985883},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable Heart Rate Monitor","Message":"Associate groupParam Enable Disable Heart Rate Monitor to command Set Watch Settings","Timestamp":1707985888},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Detecting Interval","Message":"(Update) (Heart Rate Detecting Interval) Add set watch settings command","Timestamp":1707985910},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Detecting Interval","Message":"Associate groupParam Heart Rate Detecting Interval to command Set Watch Settings","Timestamp":1707985915},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable Step Counting","Message":"(Update) (Enable Disable Step Counting) Add set watch settings command","Timestamp":1707985928},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable Step Counting","Message":"Associate groupParam Enable Disable Step Counting to command Set Watch Settings","Timestamp":1707985935},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Step Counting Interval","Message":"(Update) (Step Counting Interval) Add set watch settings command","Timestamp":1707985951},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Step Counting Interval","Message":"Associate groupParam Step Counting Interval to command Set Watch Settings","Timestamp":1707985957},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Heart Rate Detecting Interval","Message":"(Update) (Heart Rate Detecting Interval) define default value","Timestamp":1707986571},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Step Collect Settings","Message":"(Update) (Step Collect Settings) Define default value","Timestamp":1707986618},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Heart Rate Detecting Interval","Message":"(Update) (Heart Rate Detecting Interval) local test code","Timestamp":1707987345},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Step Collect Settings","Message":"(Update) (Step Collect Settings) small typo fix \"spaces in msg\"","Timestamp":1707987941},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Set Watch Settings","Message":"(Update) (Set Watch Settings) Fix error in step off heart on","Timestamp":1708002138},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Set Watch Settings","Message":"(Update) (Set Watch Settings) set var messageBody = '0211360008'; // step count/heart value display","Timestamp":1708011331},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Delete Records","Message":"(Update) (Delete Records) Type send by GPRS","Timestamp":1708013025},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Power Off","Message":"(Update) (Power Off) Define SMS version ticket: 604730","Timestamp":1708014431},{"Version":"2.7","UserName":"juanmi","Resource":"Command","Name":"Control Configuration Mode","Message":"(Create) (Control Configuration Mode) New command for configuration mode, ticket: 611088","Timestamp":1708015260},{"Version":"2.7","UserName":"juanmi","Resource":"MessageType","Name":"ACK-HRB-SMS","Message":"(Create) (ACK-HRB-SMS) ACK for Control configuration mode","Timestamp":1708015442},{"Version":"2.7","UserName":"juanmi","Resource":"Group","Name":"Controls","Message":"(Create) (Controls) New group for configuration mode","Timestamp":1708016932},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Configuration Mode","Message":"(Create) (Configuration Mode) Add checkbox configuration mode","Timestamp":1708016984},{"Version":"2.7","UserName":"juanmi","Resource":"GroupParam","Name":"Configuration Mode","Message":"Associate groupParam Configuration Mode to command Control Configuration Mode","Timestamp":1708016992},{"Version":"2.7","UserName":"erobu@oysta-technology.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) avoid sending associate if imei is defined or null","Timestamp":1708082493},{"Version":"2.7","UserName":"juanmi","Resource":"Operation","Name":"OnUpdateProtocol_EView","Message":"(Update) (OnUpdateProtocol_EView) Add Controls.ConfigurationMode","Timestamp":1708276363},{"Version":"2.7","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"USER STORY 628198","Timestamp":1708960350},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Watch Face","Message":"(Create) (Heart Rate Watch Face) Add chechbox for Heart Rate Watch Face","Timestamp":1709751249},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Watch Face","Message":"Associate groupParam Heart Rate Watch Face to command Set Watch Settings","Timestamp":1709751289},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Watch Face","Message":"(Update) (Heart Rate Watch Face) Add help text","Timestamp":1709751323},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Step Counting Watch Face","Message":"(Create) (Step Counting Watch Face) Add checkbox Step Counting Watch Face","Timestamp":1709751421},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Step Counting Watch Face","Message":"Associate groupParam Step Counting Watch Face to command Set Watch Settings","Timestamp":1709751462},{"Version":"2.8","UserName":"juanmi","Resource":"Operation","Name":"OnUpdateProtocol_EView","Message":"(Update) (OnUpdateProtocol_EView) Added OnUpdate for StepCounting.StepCountingWatchFace and HeartRateMonitor.HeartRateWatchFace","Timestamp":1709751672},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Set Watch Settings","Message":"(Update) (Set Watch Settings) Add Watch setting related FACE ID","Timestamp":1709752193},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Set Watch Settings","Message":"(Update) (Set Watch Settings) add watch face select 1","Timestamp":1709835912},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Watch Face","Message":"(Create) (Watch Face) Create Watch Face Group","Timestamp":1709836244},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Set Watch Face","Message":"(Create) (Set Watch Face) Select Watch Face (Analog or Digital)","Timestamp":1709836470},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Set Watch Face","Message":"Associate groupParam Set Watch Face to command Set Watch Settings","Timestamp":1709836476},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Set Watch Settings","Message":"(Update) (Set Watch Settings) Add different Watch Face IDs","Timestamp":1709837334},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Watch Face","Message":"(Create) (Heart Rate Watch Face) Add check box Heart Rate Watch Face","Timestamp":1709837461},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Watch Face","Message":"Associate groupParam Heart Rate Watch Face to command Set Watch Settings","Timestamp":1709837469},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Set Watch Face","Message":"(Update) (Set Watch Face) Reorder Group Params","Timestamp":1709837495},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Watch Face","Message":"(Update) (Heart Rate Watch Face) Reorder Group Params","Timestamp":1709837499},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Step Counting Watch Face","Message":"(Create) (Step Counting Watch Face) Add checkbox Step Counting Watch Face","Timestamp":1709837549},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Step Counting Watch Face","Message":"Associate groupParam Step Counting Watch Face to command Set Watch Settings","Timestamp":1709837554},{"Version":"2.8","UserName":"juanmi","Resource":"Operation","Name":"OnUpdateProtocol_EView","Message":"(Update) (OnUpdateProtocol_EView) Add default for WatchFace.SetWatchFace","Timestamp":1709837697},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Set Watch Settings","Message":"(Update) (Set Watch Settings) minor fix","Timestamp":1709838700},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Set Watch Settings","Message":"(Update) (Set Watch Settings) Add control to show // hide Step and Heart Menus","Timestamp":1710174590},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Watch Face","Message":"(Update) (Watch Face) Reorder Groups","Timestamp":1710182468},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Heart Rate Monitor","Message":"(Update) (Heart Rate Monitor) Reorder Groups","Timestamp":1710182472},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Step Counting","Message":"(Update) (Step Counting) Reorder Groups","Timestamp":1710182509},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Device Version","Message":"(Update) (Device Version) Reorder Groups","Timestamp":1710182514},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"No Activity","Message":"(Update) (No Activity) Reorder Groups","Timestamp":1710182518},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Voice Prompt","Message":"(Update) (Voice Prompt) Reorder Groups","Timestamp":1710182523},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Update Firmware","Message":"(Update) (Update Firmware) Reorder Groups","Timestamp":1710182528},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"SMS Prefix","Message":"(Update) (SMS Prefix) Reorder Groups","Timestamp":1710182533},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Server","Message":"(Update) (Server) Reorder Groups","Timestamp":1710182538},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Set APN","Message":"(Update) (Set APN) Reorder Groups","Timestamp":1710182542},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"WiFi Connect","Message":"(Update) (WiFi Connect) Reorder Groups","Timestamp":1710182547},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Request Location","Message":"(Update) (Request Location) Reorder Groups","Timestamp":1710182551},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Enable Control","Message":"(Update) (Enable Control) Reorder Groups","Timestamp":1710182555},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"SMS Password","Message":"(Update) (SMS Password) Reorder Groups","Timestamp":1710182560},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Working Mode","Message":"(Update) (Working Mode) Reorder Groups","Timestamp":1710182564},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Cycle Interval","Message":"(Update) (Cycle Interval) Reorder Groups","Timestamp":1710182568},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Continuous Locate","Message":"(Update) (Continuous Locate) Reorder Groups","Timestamp":1710182572},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"System Language","Message":"(Update) (System Language) Reorder Groups","Timestamp":1710182576},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Delete Records","Message":"(Update) (Delete Records) Reorder Groups","Timestamp":1710182579},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Factory Reset","Message":"(Update) (Factory Reset) Reorder Groups","Timestamp":1710182584},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Device Reboot","Message":"(Update) (Device Reboot) Reorder Groups","Timestamp":1710182588},{"Version":"2.8","UserName":"juanmi","Resource":"Group","Name":"Power Off","Message":"(Update) (Power Off) Reorder Groups","Timestamp":1710182593},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Watch Face","Message":"(Update) (Heart Rate Watch Face) change description","Timestamp":1710182685},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Step Counting Watch Face","Message":"(Update) (Step Counting Watch Face) change description","Timestamp":1710182706},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Heart Rate Watch Face","Message":"(Update) (Heart Rate Watch Face) Reorder Group Params","Timestamp":1710184165},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Step Counting Watch Face","Message":"(Update) (Step Counting Watch Face) Reorder Group Params","Timestamp":1710184170},{"Version":"2.8","UserName":"oysta@superadmin.com","Resource":"GroupParam","Name":"Heart Rate Watch Face","Message":"(Delete) (Heart Rate Watch Face)","Timestamp":1710351065},{"Version":"2.8","UserName":"oysta@superadmin.com","Resource":"GroupParam","Name":"Step Counting Watch Face","Message":"(Delete) (Step Counting Watch Face)","Timestamp":1710351153},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Enable Control","Message":"(Update) (Enable Control) Send empty string when SMS sent is forced.","Timestamp":1711128259},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Extra Enable Control","Message":"(Update) (Extra Enable Control) Send empty string when SMS sent is forced.","Timestamp":1711128783},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Enable Control","Message":"(Update) (Enable Control) add FAKE msg for test","Timestamp":1711129191},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Enable Control","Message":"(Update) (Enable Control) remove SMS Template","Timestamp":1711478086},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Extra Enable Control","Message":"(Update) (Extra Enable Control) Remove SMS template","Timestamp":1711478110},{"Version":"2.8","UserName":"Mark_Bond","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) test change to block out customId 30 36","Timestamp":1713258924},{"Version":"2.8","UserName":"Mark_Bond","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) more testing on customId","Timestamp":1713259440},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) testing Rio associate ","Timestamp":1716198405},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) rio testing","Timestamp":1716199005},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) added check to return if the call is from gaurav or alex device","Timestamp":1716200101},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) checking the custom id to reject id 04 and 05 ","Timestamp":1716203803},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) changes the custom id to reject 04 or 5","Timestamp":1716204442},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) removed the comment to return if command is 3","Timestamp":1716204852},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) check added on heartbeat for custom id 4 and 5","Timestamp":1716211427},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) adding temp log on ria-associate method","Timestamp":1716211770},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) testing - check customer id on command =3 for 04 or 05","Timestamp":1716212316},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) log to get custom id","Timestamp":1716213190},{"Version":"2.8","UserName":"gaurav.verma@theaccessgroup.com","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) removed the extra param in assciate","Timestamp":1716219144},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Create) (TriggerOTA) Create TriggerOTA command","Timestamp":1717658804},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"OTA Update","Message":"(Update) (OTA Update) Assign TriggerOTA command to button","Timestamp":1717658921},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"OTA Update","Message":"Associate groupParam OTA Update to command TriggerOTA","Timestamp":1717658930},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) change the URL to ask for firmware (tests)","Timestamp":1717944509},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) Modify URL to gets directly to the zip file","Timestamp":1718181373},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) new URL for test","Timestamp":1718263988},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) new URL for test 2","Timestamp":1718267063},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) new URL test","Timestamp":1718307242},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Get Firmware Version","Message":"(Create) (Get Firmware Version) Add button to Get Firmware Version in controls group","Timestamp":1718360523},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Get Firmware Version","Message":"Associate groupParam Get Firmware Version to command Get Firmware version","Timestamp":1718360533},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Current Firmware Version","Message":"(Create) (Current Firmware Version) Text to inform the current firmware version","Timestamp":1718360702},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Get Firmware version","Message":"(Update) (Get Firmware version) Add SMS command","Timestamp":1718360903},{"Version":"2.8","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Add GetFirmware Command","Timestamp":1718361570},{"Version":"2.8","UserName":"juanmi","Resource":"MessageType","Name":"ACK-FIRM","Message":"(Create) (ACK-FIRM) ACK for Get Firmware Version\n","Timestamp":1718361723},{"Version":"2.8","UserName":"juanmi","Resource":"MessageType","Name":"ACK-FIRM-SMS","Message":"(Create) (ACK-FIRM-SMS) ACK for command GetFirmware by SMS","Timestamp":1718361803},{"Version":"2.8","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) define var configsToUpdate = [];\nvar configsToSend = [];","Timestamp":1718362324},{"Version":"2.8","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Add configToUpdate to // send data back to receiver via console.log","Timestamp":1718364470},{"Version":"2.8","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) small typo error Firmware Version control","Timestamp":1718562258},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) new URL to test oysta","Timestamp":1718608642},{"Version":"2.8","UserName":"David_Admin","Resource":"GroupParam","Name":"Configuration Mode","Message":"(Update) (Configuration Mode) Reorder Group Params","Timestamp":1718618526},{"Version":"2.8","UserName":"David_Admin","Resource":"GroupParam","Name":"Get Firmware Version","Message":"(Update) (Get Firmware Version) Reorder Group Params","Timestamp":1718618533},{"Version":"2.8","UserName":"David_Admin","Resource":"GroupParam","Name":"Current Firmware Version","Message":"(Update) (Current Firmware Version) Reorder Group Params","Timestamp":1718618542},{"Version":"2.8","UserName":"David_Admin","Resource":"Group","Name":"Controls","Message":"(Update) (Controls) changed order of device controls","Timestamp":1718618566},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) new URL to OTA upgrade","Timestamp":1718636161},{"Version":"2.8","UserName":"David_Admin","Resource":"MessageType","Name":"ACK-HRB-SMS","Message":"(Update) (ACK-HRB-SMS) ack was incorrect","Timestamp":1718697201},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) new URL for testoysta","Timestamp":1718812460},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"Get Firmware version","Message":"(Update) (Get Firmware version) for firmware in both formats (long/short)","Timestamp":1718817844},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Current Firmware Version","Message":"(Update) (Current Firmware Version) change description","Timestamp":1718818053},{"Version":"2.8","UserName":"juanmi","Resource":"GroupParam","Name":"Current Firmware Version Long","Message":"(Create) (Current Firmware Version Long) Text for Current Firmware Version Long Format","Timestamp":1718818112},{"Version":"2.8","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) add code for case 1A: long format of Firmware version","Timestamp":1718818383},{"Version":"2.8","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) change var fwVersionL = hex_to_ascii(value);","Timestamp":1718819021},{"Version":"2.8","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) URL to the NodeRed PoC server","Timestamp":1719421864},{"Version":"2.8","UserName":"Michael_Admin","Resource":"Command","Name":"Beacon 1","Message":"(Update) (Beacon 1) ack chase","Timestamp":1719578862},{"Version":"2.8","UserName":"Michael_Admin","Resource":"Command","Name":"Power Alert","Message":"(Update) (Power Alert) wack chase","Timestamp":1719579441},{"Version":"2.8","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Watch Face, HeartRate and Step Watch, Get Firmware Version, CustomID in operations to exit when it is presented.","Timestamp":1720455038},{"Version":"2.9","UserName":"juanmi","Resource":"MessageType","Name":"ACK-FIRM","Message":"(Update) (ACK-FIRM) Disable Long connection, enable do not send commands","Timestamp":1720717648},{"Version":"2.9","UserName":"juanmi","Resource":"MessageType","Name":"ACK-FIRM-SMS","Message":"(Update) (ACK-FIRM-SMS) Disable Long connection, enable do not send commands","Timestamp":1720717664},{"Version":"2.9","UserName":"juanmi","Resource":"MessageType","Name":"ACK-HRB-SMS","Message":"(Update) (ACK-HRB-SMS) Disable Long connection, enable do not send commands","Timestamp":1720717680},{"Version":"2.9","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) change URL to http://40.91.195.192:8098/fi_ota","Timestamp":1722507053},{"Version":"2.9","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) Add /api/ folder to the URL EndPoint","Timestamp":1722591687},{"Version":"2.9","UserName":"juanmi","Resource":"MessageType","Name":"COMM-SMS","Message":"(Update) (COMM-SMS) change to do common protocol Eview","Timestamp":1724069228},{"Version":"2.9","UserName":"juanmi","Resource":"MessageType","Name":"CHK-ASSO","Message":"(Update) (CHK-ASSO) change to do a common protocol Eview","Timestamp":1724069280},{"Version":"2.9","UserName":"juanmi","Resource":"MessageType","Name":"COMM-SMS","Message":"(Update) (COMM-SMS) undo last change, let Rio-SMS","Timestamp":1724069434},{"Version":"2.9","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) change Rio-Associate for Eview-Associate","Timestamp":1724070635},{"Version":"2.9","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Comment CustomID lines in command type 0x03. The device doesn't include it for now","Timestamp":1724242228},{"Version":"2.9","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) change URL to point Eview OTA server","Timestamp":1724928711},{"Version":"2.9","UserName":"Michael_Admin","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) pointing to oysta server by MDC ","Timestamp":1725362551},{"Version":"2.9","UserName":"Michael_Admin","Resource":"GroupParam","Name":"Dial Warning Time","Message":"(Update) (Dial Warning Time) mdc","Timestamp":1726746505},{"Version":"2.9","UserName":"Michael_Admin","Resource":"GroupParam","Name":"Dial Warning Time","Message":"(Update) (Dial Warning Time) mdc setting a help ","Timestamp":1726746755},{"Version":"2.9","UserName":"Michael_Admin","Resource":"GroupParam","Name":"Warning Time","Message":"(Update) (Warning Time) setting min time to be 5 ","Timestamp":1726749319},{"Version":"2.9","UserName":"Michael_Admin","Resource":"GroupParam","Name":"Warning Time","Message":"(Update) (Warning Time) for support ticket","Timestamp":1726821973},{"Version":"2.9","UserName":"juanmi","Resource":"GroupParam","Name":"Set Server","Message":"(Update) (Set Server) Add Server Option \"Staging Protocol Import\"","Timestamp":1728284696},{"Version":"2.9","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"OTA and msg types tidy up","Timestamp":1728377811},{"Version":"3.0","UserName":"juanmi","Resource":"GroupParam","Name":"Language","Message":"(Update) (Language) Added portuguese language","Timestamp":1729253638},{"Version":"3.0","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Request Location","Message":"(Update) (Request Location) request location set hidden false","Timestamp":1733323424},{"Version":"3.0","UserName":"David_Admin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) include 12 custom id","Timestamp":1733497295},{"Version":"3.0","UserName":"David_Admin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) add 06 custom id to avoid protocol congestion with ev06 model","Timestamp":1733502018},{"Version":"3.0","UserName":"Michael_Admin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) adding 07 for ev07 to customid","Timestamp":1733860473},{"Version":"3.0","UserName":"juanmi","Resource":"Command","Name":"Working Mode","Message":"(Update) (Working Mode) BUG 1441096 Change Interval for Mode 4 and 5 as cycle interval","Timestamp":1733949050},{"Version":"3.0","UserName":"juanmi","Resource":"GroupParam","Name":"Cycle Interval","Message":"(Update) (Cycle Interval) To reflect changes in Working mode 4 and 5. Need to send interval in Working Mode Command","Timestamp":1734001517},{"Version":"3.0","UserName":"juanmi","Resource":"GroupParam","Name":"Cycle Interval","Message":"Associate groupParam Cycle Interval to command Working Mode","Timestamp":1734001523},{"Version":"3.0","UserName":"juanmi","Resource":"GroupParam","Name":"Mode","Message":"(Update) (Mode) To reflect changes in Working mode 4 and 5. Need to send interval in Working Mode Command","Timestamp":1734001576},{"Version":"3.0","UserName":"juanmi","Resource":"GroupParam","Name":"Mode","Message":"Associate groupParam Mode to command Cycle","Timestamp":1734001582},{"Version":"3.0","UserName":"juanmi","Resource":"Command","Name":"TriggerOTA","Message":"(Update) (TriggerOTA) Add selection for production or test OTA server using server settings","Timestamp":1736338588},{"Version":"3.0","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Bump version for protocol-dev","Timestamp":1737374423},{"Version":"3.1","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Add value == '64' to customID for Sentry","Timestamp":1742057726},{"Version":"3.1","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Add value == '64' to customID for Sentry","Timestamp":1742057746},{"Version":"3.2","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Change CUSTOMID Case, so if msg has CustomID then return...","Timestamp":1742496032},{"Version":"3.2","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) create function sendDataToReceiver() and insert to inform when customID fails","Timestamp":1742499686},{"Version":"3.2","UserName":"Sean-Admin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) uncommenting local debug","Timestamp":1744114071},{"Version":"3.2","UserName":"Sean-Admin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) undoing change","Timestamp":1744114164},{"Version":"3.2","UserName":"Sean-Admin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) uncommenting all localTesting code","Timestamp":1744114758},{"Version":"3.2","UserName":"Sean-Admin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) disable sendingData on case '03'","Timestamp":1744114903},{"Version":"3.2","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"\nDEV BUG 1634606 disable sendingData on case '03'","Timestamp":1744133008},{"Version":"3.3","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Return from function when no Imei in server param to create the long connection. sendMessageToLocalhostNoWait(\"Eview-ASSOCIATE;\" + imei + \";\" + serverParams.Guid + \";\");","Timestamp":1744278293},{"Version":"3.3","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Fix tickets regarding bugs with long connection","Timestamp":1744282925},{"Version":"3.4","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Comment \"return\" in msg ASSOCIATE in msg types !=03 ","Timestamp":1744367218},{"Version":"3.4","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Fix issue with long connection stablishment","Timestamp":1744367377},{"Version":"3.5","UserName":"juanmi","Resource":"MessageType","Name":"CON-ASSO","Message":"(Update) (CON-ASSO) change msg code to CON","Timestamp":1749056594},{"Version":"3.5","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) create long connection it it is needed for command 01 and 03","Timestamp":1749056964},{"Version":"3.5","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) comment //return to create long connection","Timestamp":1749108515},{"Version":"3.5","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Fix Message gets parsed by Watch/Sentry","Timestamp":1749580778},{"Version":"3.6","UserName":"Sean-Admin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) debugging version of ops","Timestamp":1752512140},{"Version":"3.6","UserName":"Sean-Admin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) reverting ops","Timestamp":1752512256},{"Version":"3.6","UserName":"juanmi","Resource":"Group","Name":"Convert Device","Message":"(Create) (Convert Device) Create group Convert Device","Timestamp":1753799991},{"Version":"3.6","UserName":"juanmi","Resource":"GroupParam","Name":"Profile","Message":"(Create) (Profile) Define param to choose new profile to convert","Timestamp":1753800289},{"Version":"3.6","UserName":"juanmi","Resource":"Command","Name":"getCustomId","Message":"(Create) (getCustomId) Command to get current value of CustomID","Timestamp":1753800680},{"Version":"3.6","UserName":"juanmi","Resource":"Command","Name":"setCustomId","Message":"(Create) (setCustomId) Define command to set Custom ID to convert to Roam and Sentry","Timestamp":1753801032},{"Version":"3.6","UserName":"juanmi","Resource":"GroupParam","Name":"Profile","Message":"(Update) (Profile) assign command","Timestamp":1753801474},{"Version":"3.6","UserName":"juanmi","Resource":"GroupParam","Name":"Profile","Message":"Associate groupParam Profile to command setCustomId","Timestamp":1753801478},{"Version":"3.6","UserName":"juanmi","Resource":"Command","Name":"setCustomId","Message":"(Update) (setCustomId) change selection values","Timestamp":1753801712},{"Version":"3.6","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"ticket 1785790: Create button in Rio device settings to change custom ID","Timestamp":1753816500},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) ticket 1796516: include GPS data in alarm","Timestamp":1754556277},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) undo changes add GPS location on Alarm","Timestamp":1754579334},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) ticket 1809866: Multimsg splitter to avoid Undefined value in script output","Timestamp":1756659844},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) ticket 1809866: define index var within decoder function","Timestamp":1756660884},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) back to previous version. bug only receive connection","Timestamp":1756665913},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) small fixes: debug msg to fix previous bug ticket 1809866","Timestamp":1756666536},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) define var localTesting = false;","Timestamp":1756666787},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) change console.log for console.debug","Timestamp":1756667194},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) comment every console.debug line","Timestamp":1756667740},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) back to previous version","Timestamp":1756668617},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Add Multimsg splitter","Timestamp":1756716942},{"Version":"3.7","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) commented return lines for associate msg","Timestamp":1756742711},{"Version":"3.7","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Ticket 1809866: Add multimsg parser and test example.","Timestamp":1756916195},{"Version":"3.8","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) TICKET 1822799: AddValue params.location_time when decoding oysta templates","Timestamp":1757012186},{"Version":"3.8","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Ticket 1822799: AGPS timestamp bug and ticket 1796516: GPS location data in alarm msg","Timestamp":1757092625},{"Version":"3.8","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Ticket 1822799: AGPS timestamp bug and ticket 1796516: GPS location data in alarm msg","Timestamp":1757093612},{"Version":"3.9","UserName":"juanmi","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) Add 1024 weeks to timestamp if it's older than 1 year from now (AGPS bug)","Timestamp":1757345176},{"Version":"3.9","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Add 1024 weeks to timestamp if it's older than 1 year from now (AGPS bug)","Timestamp":1757345310},{"Version":"4.0","UserName":"Sean-Admin","Resource":"Operation","Name":"Eview","Message":"(Update) (Eview) FIxed nullish operator as not support by node 10","Timestamp":1757507054},{"Version":"4.0","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Fix for Nullish (??) operator","Timestamp":1757507078},{"Version":"4.1","UserName":"juanmi","Resource":"GroupParam","Name":"Profile","Message":"(Delete) (Profile)","Timestamp":1761240137},{"Version":"4.1","UserName":"juanmi","Resource":"Group","Name":"Convert Device","Message":"(Delete) (Convert Device)","Timestamp":1761240154},{"Version":"4.1","UserName":"Michael_Admin","Resource":"Protocol","Name":null,"Message":"for acceptance testing ","Timestamp":1761653161}],"ProtocolActionObjects":[],"Tags":[{"Id":2110,"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},{"Name":"testMCImportExport","Description":"A test message code to verify it imports correctly into Acceptance! Modify Description.","Code":"testMCImportExport","CanLiveInsights":false},{"Name":"gaurav_code_name","Description":"gaurav_code_desc","Code":"gaurav_code","CanLiveInsights":false}]} \ No newline at end of file